2016-05-16 5 views
2

私はspacyをpythonで使用していますが、各単語にタグを付けるのにうまく機能しますが、文字列内で最も一般的な単語を見つけることが可能かどうかは疑問でした。また、最も一般的な名詞、動詞、副詞などを得ることも可能ですか?spacyを使用して最も一般的な単語を見つけるには?

count_by関数が含まれていますが、意味のある方法で実行することはできません。

答えて

6

これは、基本的にはPythonの何かを数えると同じです。 spaCyを使用すると、ドキュメント全体を繰り返し処理できるだけでなく、一連のTokenオブジェクトを返すことができます。これらを使用してアノテーションにアクセスできます。

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関数をバインドすることができます。詳細については、ドキュメントを参照してください。

大規模なコーパスをカウントしている場合は、カウントプログラムのメモリをより効率的にすることができるため、整数は便利です。追加の速度と効率のために、頻繁なカウントを数値配列に格納することもできます。これを気にしたくない場合は、.orth_属性を直接カウントするか、エイリアス.textを使用してください。

上記スニペットの.pos属性には、品詞タグの粗いセットがあります。より豊富なtreebankタグは.tag属性で利用できます。

5

私は最近、テキストファイルのすべてのトークンの頻度を数えなければなりませんでした。 pos_属性を使用して好きなPOSトークンを取得するために単語を除外することができます。簡単な例を示します:

関連する問題