gpt4 book ai didi

python - 在 python nltk.word_tokenize 中保留尾随标点符号

转载 作者:太空宇宙 更新时间:2023-11-03 15:58:05 26 4
gpt4 key购买 nike

关于删除标点符号有很多可用的方法,但我似乎找不到任何保留它的方法。

如果我这样做:

from nltk import word_tokenize
test_str = "Some Co Inc. Other Co L.P."
word_tokenize(test_str)
Out[1]: ['Some', 'Co', 'Inc.', 'Other', 'Co', 'L.P', '.']

最后一个“.”被插入它自己的 token 。但是,如果最后还有另一个词,最后一个“。”被保留:

from nltk import word_tokenize
test_str = "Some Co Inc. Other Co L.P. Another Co"
word_tokenize(test_str)
Out[1]: ['Some', 'Co', 'Inc.', 'Other', 'Co', 'L.P.', 'Another', 'Co']

我希望它始终作为第二种情况执行。现在,我正在做:

from nltk import word_tokenize
test_str = "Some Co Inc. Other Co L.P."
word_tokenize(test_str + " |||")

因为我很有信心扔掉“|||”在任何给定时间,但不知道我可能想要保留的其他标点符号可能会被删除。有没有更好的方法来完成这个?

最佳答案

这是一个拼写的怪癖,如果一个句子以缩写词结尾,我们只写一个句点,而不是两个。 nltk 的标记器不会“删除”它,而是将其拆分,因为句子结构(“句子必须以句号或其他合适的标点符号结尾”)对于 NLP 工具比缩写的一致表示更重要。分词器足够智能,可以识别大多数缩写,因此它不会在 L.P. 中分隔句点。

您使用 ||| 的解决方案导致句子结构不一致,因为您现在没有句末标点符号。更好的解决方案是仅在缩写后添加缺失的句点。这是一种方法,虽然丑陋但与分词器自己的缩写识别器一样可靠:

toks = nltk.word_tokenize(test_str + " .")
if len(toks) > 1 and len(toks[-2]) > 1 and toks[-2].endswith("."):
pass # Keep the added period
else:
toks = toks[:-1]

附言。您接受的解决方案将完全改变标记化,将所有 标点符号附加到相邻的词(以及其他不良影响,如引入空标记)。这很可能不是您想要的。

关于python - 在 python nltk.word_tokenize 中保留尾随标点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42101027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com