首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用NLTK的默认令牌程序来获取跨度而不是字符串?

如何使用NLTK的默认令牌程序来获取跨度而不是字符串?
EN

Stack Overflow用户
提问于 2015-02-23 16:22:41
回答 4查看 5.5K关注 0票数 13

NLTK的默认标记器nltk.word_tokenizer链接两个标记器,一个句子标记器,然后一个对句子操作的单词标记器。开箱就干得很好。

代码语言:javascript
复制
>>> nltk.word_tokenize("(Dr. Edwards is my friend.)")
['(', 'Dr.', 'Edwards', 'is', 'my', 'friend', '.', ')']

除了让它将偏移元组返回到原始字符串而不是字符串标记之外,我还想使用相同的算法。

我所说的偏移量是指两个可以作为原始字符串索引的值。例如,在这里我会

代码语言:javascript
复制
>>> s = "(Dr. Edwards is my friend.)"
>>> s.token_spans()
[(0,1), (1,4), (5,12), (13,15), (16,18), (19,25), (25,26), (26,27)]

因为s0:1是"(",s1:4是“Dr..”)以此类推。

是否有一个NLTK调用可以做到这一点,还是我必须编写自己的偏移算法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-04-22 00:24:59

至少因为NLTK3.4 TreebankWordTokenizer支持span_tokenize

代码语言:javascript
复制
>>> from nltk.tokenize import TreebankWordTokenizer as twt
>>> list(twt().span_tokenize('What is the airspeed of an unladen swallow ?'))
[(0, 4),
 (5, 7),
 (8, 11),
 (12, 20),
 (21, 23),
 (24, 26),
 (27, 34),
 (35, 42),
 (43, 44)]
票数 5
EN

Stack Overflow用户

发布于 2015-02-23 17:29:06

是的,nltk中的大多数托卡器都有一个名为span_tokenize的方法,但不幸的是,您使用的托卡器没有。

默认情况下,word_tokenize函数使用TreebankWordTokenizerTreebankWordTokenizer实现有一个相当健壮的实现,但目前它缺少一个重要方法span_tokenize的实现。

我认为span_tokenize没有用于TreebankWordTokenizer的实现,所以我相信您需要实现自己的。子类TokenizerI可以使这个过程变得不那么复杂。

您可能会发现PunktWordTokenizerPunktWordTokenizer方法作为起点很有用。

希望这个信息能帮上忙。

票数 8
EN

Stack Overflow用户

发布于 2020-06-02 14:40:21

pytokenizations有一个有用的函数get_original_spans来获得跨空间:

代码语言:javascript
复制
# $ pip install pytokenizations
import tokenizations
text = "(Dr. Edwards is my friend.)"
tokens = nltk.word_tokenize(text)
tokenizations.get_original_spans(tokens, text)
>>> [(0,1), (1,4), (5,12), (13,15), (16,18), (19,25), (25,26), (26,27)]

有关其他有用的函数,请参见文献资料

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

https://stackoverflow.com/questions/28678318

复制
相关文章

相似问题

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