Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 18 additions & 3 deletions PAMI/fuzzyFrequentPattern/basic/FFIMiner.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ class FFIMiner(_ab._fuzzyFrequentPatterns):
_memoryRSS = float()
_sep = "\t"

def __init__(self, iFile: str, minSup: float, sep: str="\t") -> None:
def __init__(self, iFile: str, minSup: float, sep: str = "\t", k: int = 1) -> None:
super().__init__(iFile, minSup, sep)
self._Database = None
self._startTime = 0
Expand All @@ -173,6 +173,7 @@ def __init__(self, iFile: str, minSup: float, sep: str="\t") -> None:
self._minSup = minSup
self._iFile = iFile
self._sep = sep
self._k = k
self._finalPatterns = {}
self._memoryUSS = 0
self._memoryRSS = 0
Expand Down Expand Up @@ -219,7 +220,7 @@ def _creatingItemsets(self) -> None:
except IOError:
print("File Not Found")
quit()

def startMine(self):
self.mine()

Expand All @@ -243,7 +244,7 @@ def _convert(self, value) -> Union[int, float]:
else:
value = int(value)
return value

def dfs(self, cands):
"""
Perform depth-first search (DFS) to find frequent patterns in a database.
Expand Down Expand Up @@ -296,6 +297,20 @@ def mine(self):
items[item] = {}
items[item][lineNo] = fuzzyValue

if self._k >= 1:
#default k = 1 (max cardinality)
labelsByBaseItem = {}
for label in items:
token = label[0]
baseItem = token.rsplit('.', 1)[0] if '.' in token else token
labelsByBaseItem.setdefault(baseItem,[]).append(label)
for baseItem,labels in labelsByBaseItem.items():
if len(labels) <= self._k:
continue
ranked = sorted(labels, key=lambda lbl: sum(items[lbl].values()), reverse=True)
for lbl in ranked[self._k:]:
del items[lbl]

self._minSup = self._convert(self._minSup)
self._Database = items.copy()

Expand Down
19 changes: 17 additions & 2 deletions PAMI/fuzzyGeoreferencedFrequentPattern/basic/FFSPMiner.py
Original file line number Diff line number Diff line change
Expand Up @@ -278,13 +278,14 @@ class FFSPMiner(_ab._fuzzySpatialFrequentPatterns):
_nFile = " "
_sep = "\t"

def __init__(self, iFile: str, nFile: str, minSup: float, sep: str="\t") -> None:
def __init__(self, iFile: str, nFile: str, minSup: float, sep: str = "\t", k: int = 1) -> None:
super().__init__(iFile, nFile, minSup, sep)
self.oFile = None
self._mapItemNeighbours = {}
self._startTime = 0
self._endTime = 0
self._mapItemSum = {}
self._k = k
self._joinsCnt = 0
self._BufferSize = 200
self._itemSetBuffer = []
Expand Down Expand Up @@ -446,6 +447,20 @@ def mine(self) -> None:
self._mapItemSum[item] += quantities[i]
else:
self._mapItemSum[item] = quantities[i]

if self._k >= 1:
#default k = 1 (max cardinality)
labelsByBaseItem = {}
for label in self._mapItemSum:
baseItem = label.rsplit('.', 1)[0] if '.' in label else label
labelsByBaseItem.setdefault(baseItem, []).append(label)
for baseItem, labels in labelsByBaseItem.items():
if len(labels) <= self._k:
continue
ranked = sorted(labels, key=lambda lbl: self._mapItemSum[lbl], reverse=True)
for lbl in ranked[self._k:]:
del self._mapItemSum[lbl]

listOfFFList = []
mapItemsToFFLIST = {}
#self._minSup = self._convert(self._minSup)
Expand All @@ -466,7 +481,7 @@ def mine(self) -> None:
pair.item = items[i]
pair.quantity = quantities[i]
item = pair.item
if self._mapItemSum[item] >= self._minSup:
if self._mapItemSum.get(item, 0) >= self._minSup:
if pair.quantity > 0:
revisedTransaction.append(pair)
revisedTransaction.sort(key=_ab._functools.cmp_to_key(self._compareItems))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -268,13 +268,14 @@ class FGPFPMiner(_ab._fuzzySpatialFrequentPatterns):
_sep = "\t"


def __init__(self, iFile, nFile, minSup, maxPer, sep):
def __init__(self, iFile, nFile, minSup, maxPer, sep, k=1):
super().__init__(iFile, nFile, minSup, maxPer, sep)
self.oFile = None
self._mapItemNeighbours = {}
self._startTime = 0
self._endTime = 0
self._itemsCnt = 0
self._k = k
self._itemSupData = {}
self._mapItemSum = {}
self._joinsCnt = 0
Expand Down Expand Up @@ -463,6 +464,19 @@ def mine(self):
Step3. At the end, sort the list of stored Candidate Frequent-Periodic Patterns in ascending order
"""

if self._k >= 1:
#default k = 1 (max cardinality)
labelsByBaseItem = {}
for label in self._itemSupData:
baseItem = label.rsplit('.', 1)[0] if '.' in label else label
labelsByBaseItem.setdefault(baseItem, []).append(label)
for baseItem, labels in labelsByBaseItem.items():
if len(labels) <= self._k:
continue
ranked = sorted(labels, key=lambda lbl: self._itemSupData[lbl], reverse=True)
for lbl in ranked[self._k:]:
del self._itemSupData[lbl]

listOfFFList = []
mapItemsToFFLIST = {}
#region_label = []
Expand Down
19 changes: 17 additions & 2 deletions PAMI/fuzzyPeriodicFrequentPattern/basic/FPFPMiner.py
Original file line number Diff line number Diff line change
Expand Up @@ -309,12 +309,13 @@ class FPFPMiner(_ab._fuzzyPeriodicFrequentPatterns):
_fuzzyValues = []
_ts = []

def __init__(self, iFile: Union[str, _ab._pd.DataFrame], minSup: Union[int, float], period: Union[int, float], sep: str="\t") -> None:
def __init__(self, iFile: Union[str, _ab._pd.DataFrame], minSup: Union[int, float], period: Union[int, float], sep: str = "\t", k: int = 1) -> None:
super().__init__(iFile, minSup, period, sep)
self._oFile = ""
self._BufferSize = 200
self._itemSetBuffer = []
self._mapItemSum = {}
self._k = k
self._finalPatterns = {}
self._joinsCnt = 0
self._itemsCnt = 0
Expand Down Expand Up @@ -451,6 +452,20 @@ def mine(self) -> None:
self._mapItemSum[item] += quantities[i]
else:
self._mapItemSum[item] = quantities[i]

if self._k >= 1:
#default k = 1 (max cardinality)
labelsByBaseItem = {}
for label in self._mapItemSum:
baseItem = label.rsplit('.', 1)[0] if '.' in label else label
labelsByBaseItem.setdefault(baseItem, []).append(label)
for baseItem, labels in labelsByBaseItem.items():
if len(labels) <= self._k:
continue
ranked = sorted(labels, key=lambda lbl: self._mapItemSum[lbl], reverse=True)
for lbl in ranked[self._k:]:
del self._mapItemSum[lbl]

listOfFFIList = []
mapItemsToFFLIST = {}
# self._minSup = self._convert(self._minSup)
Expand All @@ -475,7 +490,7 @@ def mine(self) -> None:
pair.item = items[i]
item = pair.item
pair.quantity = quantities[i]
if self._mapItemSum[item] >= self._minSup:
if self._mapItemSum.get(item, 0) >= self._minSup:
if pair.quantity > 0:
revisedTransaction.append(pair)
revisedTransaction.sort(key=_ab._functools.cmp_to_key(self._compareItems))
Expand Down
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

setuptools.setup(
name='pami',
version='2026.06.14.1',
version='2026.06.24.1',
author='Rage Uday Kiran',
author_email='uday.rage@gmail.com',
description='This software is being developed at the University of Aizu, Aizu-Wakamatsu, Fukushima, Japan',
Expand Down