首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于字典的NLTK标记器

基于字典的NLTK标记器
EN

Stack Overflow用户
提问于 2013-09-07 14:47:13
回答 2查看 1.3K关注 0票数 4

我想使用NLTK和Stanford-NLP来标记文本中的位置字符串

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

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

我不需要做任何语义分析,只需要根据我的位置字典来标记位置。

想法?

EN

回答 2

Stack Overflow用户

发布于 2013-09-11 15:24:16

您可以使用UnigramTagger

代码语言:javascript
复制
#!/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))

打印:

代码语言:javascript
复制
[('I', None), ('visited', None), ('Paris', 'LOC'), ('and', None),
 ('Bordeaux', 'LOC'), (',', None), ('but', None), ('not', None),
 ('Los', None), ('Angeles', None)]

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

票数 2
EN

Stack Overflow用户

发布于 2013-11-06 22:53:25

如果您所需要的只是查找字典,那么htql.RegEx()可能是一个很好的选择。以下是来自http://htql.net的示例:

代码语言:javascript
复制
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返回匹配的位置。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18670595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档