我正在创建一个模块来分析给定文本中的标记和分隔符模式的频率,并将其分成句子。
我有一个类“SequencePattern”,它在一组标记化句子中标识一个元素(标记或分隔符),其中每个SequencePattern都有一个由元组组成的列表属性“occurrence”({{1这个特定元素实际发生的地方。 SequencePattern类有一个类级别字段seq_patterns(a n_sentence, n_element
),其中存储了所有单独的SequencePattern实例。
在处理的这个阶段,我只有单元素的SequencePatterns,并且已经淘汰了所有这样的SequencePatterns,其中< 2次出现。但是SequencePattern是set
的子类,现在的想法是找到“两个元素”的SequencePatterns。
我需要做的下一件事是遍历除草后剩下的所有单元素SequencePatterns,找出在同一个句子中找到两个(或更多)相邻事件的位置,即tuple
所在的位置相同且n_sentence
相差1。
所以我需要按照这些方针做点什么:
n_element
...但当然这不起作用:我得到
occurrences_by_text_order = sorted( SequencePattern.seq_patterns.occurrences )
不知怎的,我需要在seq_patterns中对所有SequencePatterns进行迭代,然后为每个迭代完成所有这些事件的“嵌套”迭代......我需要提交大量已传递的元组({{1 }}}到AttributeError: 'set' object has no attribute 'occurences'
函数。
我不是一个经验丰富的Pythonista,但我怀疑这是一个发电机的工作(?)。有人可以帮忙吗?
答案 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