在自然語言處理中,通常使用n-grams
從句子中提取常見模式和序列。 在Python中,你可以使用優秀的NLTK
模塊。
要計算和查找最常見的,可以使用collections.Counter
。
下面是2-克例如:
from nltk.util import ngrams
from collections import Counter
from itertools import chain
string1="once upon a time there was a very large giant called Jack"
string2="a very long time ago was a very brave young man called Jack"
n = 2
ngrams1= ngrams(string1.split(" "), n)
ngrams2= ngrams(string2.split(" "), n)
counter= Counter(chain(ngrams1,ngrams2)) #count occurrences of each n-gram
print [k[0] for k,v in counter.items() if v>1] #print all ngrams that come up more than once
輸出:
[('called', 'Jack'), ('was', 'a'), ('a', 'very')]
輸出與n=3
:
[('was', 'a', 'very')]
輸出與n=1
(無元組):
['Jack', 'a', 'was', 'time', 'called', 'very']
我認爲這裏不需要正則表達式。 – 2014-09-22 15:23:02
效率取決於你問的對象,因開發者的不同而不同。但就你而言,我想說在列表中混合使用單個單詞和短語不會很有效。也許將每個單詞存儲到數據庫中(或者創建自己的數據類型)並跟蹤每個單詞前後的內容...對您而言可能有效或不可能有效。 – 2014-09-22 15:30:02