簡體   English   中英

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

[英]How to perform this sort operation in python

我正在創建一個模塊來分析給定文本中分成句子的標記和定界符模式的頻率。

我有一個“ SequencePattern”類,它標識一組標記化句子中的一個元素 (令牌或定界符),其中每個SequencePattern都有一個由元組( n_sentence, n_element )組成的列表屬性“出現” n_sentence, n_element實際發生此特定元素的地方。 類SequencePattern具有一個類級別字段seq_patterns(一個set ),所有單獨的SequencePattern實例都存儲在該字段中。

在處理的這個階段,我只有一個元素的SequencePatterns,並且已經淘汰了所有出現<2次的SequencePatterns。 但是SequencePattern是tuple的子類,現在的想法是找到“兩個元素” 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進行迭代,然后為每個迭代所有出現的“嵌套”迭代...並且我需要將此傳遞的元組質量( n_sentence, n_element )提交給sorted功能。

我不是經驗豐富的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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM