2016-05-16 25 views
2

我使用python spacy和它的工作正常標記每個單詞,但我想知道是否有可能找到一個字符串中最常見的單詞。還有可能獲得最常見的名詞,動詞,副詞等嗎?如何使用spacy找到最常用的單詞?

有一個count_by函數,但我似乎無法讓它以任何有意義的方式運行。

回答

6

這應該看起來與在Python中對其他東西進行計數基本相同。 spaCy允許您迭代文檔,並返回一系列令牌對象。這些可用於訪問註釋。

from __future__ import print_function, unicode_literals 
import spacy 
from collections import defaultdict, Counter 

nlp = spacy.load('en') 

pos_counts = defaultdict(Counter) 
doc = nlp(u'My text here.') 

for token in doc: 
    pos_counts[token.pos][token.orth] += 1 

for pos_id, counts in sorted(pos_counts.items()): 
    pos = doc.vocab.strings[pos_id] 
    for orth_id, count in counts.most_common(): 
     print(pos, count, doc.vocab.strings[orth_id]) 

請注意,.orth和.pos屬性是整數。您可以通過.orth_和.pos_屬性獲取它們映射的字符串。 .orth屬性是令牌的非標準化視圖,還有.lower,.lemma等字符串視圖。你可能想綁定一個.norm函數來做你自己的字符串規範化。有關詳細信息,請參閱文檔。

整數對於您的計數很有用,因爲如果您計算的是大型語料庫,則可以使計數程序更加高效地存儲內存。您還可以將頻繁計數存儲在一個numpy數組中,以提高速度和效率。如果你不想打擾這個,可以直接用.orth_屬性來計算,或者使用別名.text。

請注意,上面代碼片段中的.pos屬性給出了一組粗糙的詞性標籤。更豐富的樹庫標籤在.tag屬性中可用。

5

我最近不得不計算文本文件中所有記號的頻率。您可以使用pos_屬性過濾出單詞以獲得您喜歡的POS令牌。這裏有一個簡單的例子:

相關問題