2015-12-08 38 views
0

我正在創建一個模塊,用於分析給定文本中的令牌和分隔符模式的頻率,並將其分解爲多個句子。如何在python中執行這種排序操作

我有一個類「SequencePattern」,這在一組標記化的句子,其中每個SequencePattern具有列表屬性「出現」由...組成的元組(n_sentence, n_element)標識一個元件(令牌或分隔符),其中該特定元件實際發生。類SequencePattern具有類級字段seq_patterns(a set),其中存儲了所有單獨的SequencePattern實例。

在處理的這個階段,我只有一個元素的SequencePatterns,並且已經清除了所有出現的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,但我懷疑這是一個發電機(?)的工作。誰能幫忙?

+0

'排序([在SequencePattern.seq_patterns X對於x如果len(x)== 1])'然後尋找鄰接。如果我理解你,我認爲這是下一步。 – mpez0

+0

這不能解決我問的問題,這是關於迭代迭代器的問題。 –

回答

1
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 
+0

與此相同,但更短,將是:'排序(出現在SequencePattern.seq_patterns中的seq_patt出現在seq_patt.occurrences中)',儘管我沒有得到*您相鄰的*的含義以及您正在嘗試完成的內容通過排序:) – zvone

+0

@zvone謝謝!是的,很抱歉,這實際上很簡單,但可能很難解釋:我只想查找出現多次並且彼此相鄰的所有元素(單詞或分隔符,即分隔單詞的非單詞字符序列)。以鑑別不止一次出現的二元序列。 –