如何在 python 中执行此排序操作

How to perform this sort operation in python

我正在创建一个模块来分析拆分成句子的给定文本中标记和分隔符模式的频率。

我有一个 class "SequencePattern" 它在一组标记化的句子中标识一个 元素 (标记或定界符),其中每个 SequencePattern 都有一个列表属性 "occurrences" 由元组 ( n_sentence, n_element ) 组成,其中该特定元素实际出现。 Class SequencePattern 有一个 class 级别的字段,seq_patterns(一个 set),其中存储了所有单独的 SequencePattern 实例。

在处理的这个阶段,我只有单元素 SequencePatterns,并且已经淘汰了所有出现次数 < 2 的 SequencePatterns。但是 SequencePattern 是 tuple 的子 class,现在的想法是找到 "two element" SequencePatterns。

接下来我需要做的是遍历除草后保留的所有单元素 SequencePatterns,确定在同一个句子中找到两个(或更多)相邻事件的位置,即 n_sentence 相同,n_element 相差 1.

所以我需要按照这些思路做一些事情:

occurrences_by_text_order = sorted( SequencePattern.seq_patterns.occurrences )

...但这当然行不通:我得到

AttributeError: 'set' object has no attribute 'occurences'

我需要以某种方式对 seq_patterns 中的所有 SequencePatterns 进行一次迭代,然后对每个序列模式进行一次 "nested" 迭代...我需要提交这个传递给 sorted 函数的元组 ( n_sentence, n_element ) 的质量。

我不是经验丰富的 Pythonista,但我怀疑这是生成器 (?) 的工作。有人可以帮忙吗?

def get_occurrences():
    for seq_patt in SequencePattern.seq_patterns:
        for occurrence in seq_patt.occurrences:
            yield occurrence
occurrences_by_text_order = sorted( get_occurrences() ) 

然后打印出所有可能出现不止一次的二元序列的列表(我们现在知道二元序列不可能有在其他任何地方出现的频率 > 1):

prev_occurrence = None
for occurrence in sorted( occurrence for seq_patt in SequencePattern.seq_patterns for occurrence in seq_patt.occurrences ):
    if prev_occurrence and ( occurrence[ 0 ] == prev_occurrence[ 0 ] ) and ( occurrence[ 1 ] - prev_occurrence[ 1 ] == 1 ):  
        print( '# prev_occurrence %s occurrence: %s' % ( prev_occurrence, occurrence, ))
    prev_occurrence = occurrence