首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
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

Stack Overflow用户

发布于 2020-08-29 14:09:39

NLTK3.5版的TreebankWordDetokenizer支持span_tokenize()函数,因此不再需要编写自己的偏移算法:

代码语言:javascript
复制
>>> from nltk.tokenize import TreebankWordTokenizer
>>> s = '''Good muffins cost $3.88\\nin New (York).  Please (buy) me\\ntwo of them.\\n(Thanks).'''
>>> expected = [(0, 4), (5, 12), (13, 17), (18, 19), (19, 23),
... (24, 26), (27, 30), (31, 32), (32, 36), (36, 37), (37, 38),
... (40, 46), (47, 48), (48, 51), (51, 52), (53, 55), (56, 59),
... (60, 62), (63, 68), (69, 70), (70, 76), (76, 77), (77, 78)]
>>> list(TreebankWordTokenizer().span_tokenize(s)) == expected
True
>>> expected = ['Good', 'muffins', 'cost', '$', '3.88', 'in',
... 'New', '(', 'York', ')', '.', 'Please', '(', 'buy', ')',
... 'me', 'two', 'of', 'them.', '(', 'Thanks', ')', '.']
>>> [s[start:end] for start, end in TreebankWordTokenizer().span_tokenize(s)] == expected
True
票数 0
EN
查看全部 4 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28678318

复制
相关文章

相似问题

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