如何在Python中执行这种排序操作

2024-09-30 18:15:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我有一个类“SequencePattern”,它标识一组标记化语句中的一个元素(标记或分隔符),其中每个SequencePattern都有一个由元组(n_sentence, n_element)组成的列表属性“occurrences”,这个元组是这个特定元素实际出现的位置。Class SequencePattern有一个类级字段seq\u patterns(aset),其中存储了所有单独的SequencePattern实例。你知道吗

在处理的这个阶段,我只有一个元素SequencePatterns,并且剔除了所有出现了<;2次的SequencePatterns。但是SequencePattern是tuple的一个子类,现在的想法是找到“双元素”SequencePattern。你知道吗

下一步我需要做的是遍历剔除后保留的所有单元素序列模式,确定在同一个句子中发现两个(或更多)相邻出现的点,即n_sentence相同且n_element相差1的点。你知道吗

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

occurrences_by_text_order = sorted( SequencePattern.seq_patterns.occurrences )

。。。但这当然行不通:我明白了

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

不知何故,我需要对seq\模式中的所有SequencePatterns进行一次迭代,然后对每个SequencePatterns进行一次“嵌套”迭代,对每个SequencePatterns的所有引用进行迭代。。。我需要将大量传递的元组(n_sentence, n_element)提交给sorted函数。你知道吗

我不是一个经验丰富的Python,但我怀疑这是一个发电机(?)的工作。有人能帮忙吗?你知道吗


Tags: 模块标记元素模式elementseqsentencepatterns
1条回答
网友
1楼 · 发布于 2024-09-30 18:15:27
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

相关问题 更多 >