5
5
John Wiley & Sons, 2004.
6
6
"""
7
7
8
+ from collections import Counter
9
+
8
10
from .fcbo import fast_generate_from
9
11
10
12
11
13
def lattice (context ):
12
- edges = covering_edges (fast_generate_from (context ), context )
14
+ concepts = tuple (fast_generate_from (context ))
15
+ edges = covering_edges (concepts , context )
13
16
14
- mapping = {}
17
+ mapping = dict ([( extent , ( extent , intent , [], [])) for extent , intent in concepts ])
15
18
16
19
for concept , lower_neighbor in edges :
17
- extent , intent = concept
18
- lower_extent , lower_intent = lower_neighbor
19
-
20
- if extent in mapping :
21
- _ , _ , _ , lower = mapping [extent ]
22
- lower .append (lower_extent )
23
- else :
24
- mapping [extent ] = (extent , intent , [], [lower_extent ])
20
+ extent , _ = concept
21
+ lower_extent , _ = lower_neighbor
25
22
26
- if lower_extent in mapping :
27
- _ , _ , upper , _ = mapping [lower_extent ]
28
- upper .append (extent )
29
- else :
30
- mapping [lower_extent ] = (lower_extent , lower_intent , [extent ], [])
23
+ mapping [extent ][3 ].append (lower_extent )
24
+ mapping [lower_extent ][2 ].append (extent )
31
25
32
26
return mapping .values ()
33
27
@@ -97,7 +91,7 @@ def covering_edges(concept_list, context):
97
91
concept_index = dict (concept_list )
98
92
99
93
for extent , intent in concept_index .items ():
100
- candidate_counter = dict . fromkeys ( concept_index , 0 )
94
+ candidate_counter = Counter ( )
101
95
102
96
property_candidates = Properties .fromint (Properties .supremum & ~ intent )
103
97
@@ -107,4 +101,4 @@ def covering_edges(concept_list, context):
107
101
candidate_counter [extent_candidate ] += 1
108
102
109
103
if (intent_candidate .count () - intent .count ()) == candidate_counter [extent_candidate ]:
110
- yield (extent , intent ), (extent_candidate , intent_candidate )
104
+ yield (extent , intent ), (extent_candidate , intent_candidate )
0 commit comments