NLTK と Stanford-NLP を使用して、テキスト内の場所の文字列にタグを付けたい
NLTK/Stanford-NLP のディクショナリ ルックアップ タガーを探しています。
1 つの方法は、RegexpTagger(NLTK) を使用して、そこにあるすべてのロケーション文字列を提供することですが、遅くなる可能性があります。
場所辞書に基づいて場所にタグを付ける以外に、意味分析を行う必要はありません。
アイデア?
NLTK と Stanford-NLP を使用して、テキスト内の場所の文字列にタグを付けたい
NLTK/Stanford-NLP のディクショナリ ルックアップ タガーを探しています。
1 つの方法は、RegexpTagger(NLTK) を使用して、そこにあるすべてのロケーション文字列を提供することですが、遅くなる可能性があります。
場所辞書に基づいて場所にタグを付ける以外に、意味分析を行う必要はありません。
アイデア?
使用できますUnigramTagger
:
#!/usr/bin/env python2
from nltk.tag.sequential import UnigramTagger
from nltk.tokenize import word_tokenize, sent_tokenize
text = 'I visited Paris and Bordeaux. Not Los Angeles'
locations = [[('Paris', 'LOC'), ('Bordeaux', 'LOC'), ('France', 'LOC'),
('Los Angeles', 'LOC')]]
location_tagger = UnigramTagger(locations)
for sentence in sent_tokenize(text):
tokens = word_tokenize(sentence)
print(location_tagger.tag(tokens))
版画:
[('I', None), ('visited', None), ('Paris', 'LOC'), ('and', None),
('Bordeaux', 'LOC'), (',', None), ('but', None), ('not', None),
('Los', None), ('Angeles', None)]
ロサンゼルスのような複数単語の場所にタグを付けたい場合は、より優れたトークナイザーが必要になります。
必要なのは辞書から調べることだけなら、htql.RegEx() が適しているかもしれません。http://htql.netの例を次に示します。
import htql;
address = '88-21 64th st , Rego Park , New York 11374'
states=['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut',
'Delaware', 'District Of Columbia', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana',
'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachusetts', 'Michigan',
'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire',
'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma',
'Oregon', 'PALAU', 'Pennsylvania', 'PUERTO RICO', 'Rhode Island', 'South Carolina', 'South Dakota',
'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin',
'Wyoming'];
a=htql.RegEx();
a.setNameSet('states', states);
state_zip1=a.reSearchStr(address, "&[s:states][,\s]+\d{5}", case=False)[0];
# state_zip1 = 'New York 11374'
state_zip2=a.reSearchList(address.split(), r"&[ws:states]<,>?<\d{5}>", case=False)[0];
# state_zip2 = ['New', 'York', '11374']
パラメータを使用できます: useindex=True を使用して、一致する位置を返します。