4

我想使用 NLTK 以及 Stanford-NLP 在文本中标记位置字符串

并且正在寻找 NLTK/Stanford-NLP 的字典查找标记器,到目前为止,我还没有找到任何使用 Dictionary-lookup 方法的东西。

一种方法是使用 RegexpTagger(NLTK) 并在其中提供每个位置字符串,但它可能会变慢。

除了根据我的位置词典标记位置外,我不需要进行任何语义分析。

想法?

4

2 回答 2

2

你可以使用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)]

如果您想标记像洛杉矶这样的多词位置,您将需要一个更好的标记器。

于 2013-09-11T07:24:15.690 回答
0

如果您只需要从字典中查找,那么 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 返回匹配的位置。

于 2013-11-06T14:53:25.497 回答