首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NLTK标签能正确识别收缩吗?

NLTK标签能正确识别收缩吗?
EN

Stack Overflow用户
提问于 2021-08-09 20:52:07
回答 2查看 96关注 0票数 1

我想知道在向NLTK的pos标签发送给定的文本之前,是否需要编写一个反收缩函数。我不愿意标记单词,因为它们最终可能会像(不要‘do’,‘nt’)一样,我怀疑这会使pos标记更加困难。

简而言之,我的问题是:nltk的pos标签是否能识别大多数收缩(根据我有限的经验,它似乎能很好地实现w/o单词标记)?单词标记化(相对于简单的单词拆分)会改进或削弱这个过程吗?对我来说写反收缩函数会更容易吗?还有其他能识别宫缩的人吗?

Example_text=“我不能也不会去公园,因为我不喜欢草。”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-19 08:20:47

,我想知道在向NLTK的pos标签发送给定的文本之前,是否需要编写一个反收缩函数。

你不知道。默认的nltk标签使用使用默认nltk标记标记的文本进行培训,并正确地处理以相同方式标记的文本。其他任何东西都会是nltk中的一个bug。因此,如果您更改令牌程序,将使性能更差,而不是更好。

如果你尝试一下自己的例子,你会发现它正确地将"ca“和"wo”标记为MD (情态动词),尽管在英语中没有这样的单词;我并不特别喜欢它(为什么不把“no”标记为"can“呢?),但是标记者当然知道如何处理它。

代码语言:javascript
复制
>>> nltk.pos_tag(nltk.word_tokenize(example_text))
[('I', 'PRP'), ('ca', 'MD'), ("n't", 'RB'), ('and', 'CC'), ('I', 'PRP'),
 ('wo', 'MD'), ("n't", 'RB'), ('go', 'VB'), ('to', 'TO'), ('the', 'DT'),
 ('park', 'NN'), ('because', 'IN'), ('I', 'PRP'), ('do', 'VBP'), ("n't", 'RB'), 
('like', 'VB'), ('grass', 'NN'), ('.', '.')]

招待员会不会弄错了?一定。没有一个标记是完美的。但是,如果你想要更好的表现,你需要找到或训练一个更好的标签。您不能“改进”标记器这个词,标记器是设计用来使用的。

PS。您应该一次只传递一个(标记化的)语句给标记者。如果将整个文件作为单词列表传递给它,则会不必要地丢失性能。你应该这样做:

代码语言:javascript
复制
sents = [ nltk.word_tokenize(s) for s in nltk.sent_tokenize(long_text) ]
nltk.pos_tag_sents(sents)
票数 1
EN

Stack Overflow用户

发布于 2022-09-12 04:10:29

我目前遇到了类似的问题,我非常想掌握NLTK的窍门(对于synsets比任何东西都重要),我发现Spacy对像我这样的相对新手更友好,在处理收缩时更健壮。

安装:

代码语言:javascript
复制
pip install spacy

python -m spacy download en_core_web_sm (或en_core_web_mden_core_web_lgen_core_web_trf)

示例:

代码语言:javascript
复制
import spacy
nlp = spacy.load('en_core_web_md')

sent = "I didn't believe it"
tokens_pos = nlp(sent)
for token in tokens_pos:
    print(token.lemma_ + ' ' + token.pos_)

输出:

代码语言:javascript
复制
I PRON
do AUX
not PART
believe VERB
it PRON

正如您所看到的,它同时使符号化和标记化,这需要在NLTK中单独完成。

Spacy甚至适用于典型的拼写错误/懒惰的收缩形式,如cantdont,而没有撇号。使用regex确保你的句子在处理前是干净的。

当然,没有什么是百分之百完美的。在我的输出中,我实际上注意到我有一些标记为SPACE的流氓标记,我认为这可能是原始文本中双空格的结果。它似乎在每个空格将字符串拆分成标记,将相邻的空间本身作为语音的一部分,因此您可能需要添加一些功能来过滤掉这些标记。

我在实验中注意到的另一件事(实际上我可能会写一篇关于这一点的文章)是处理撇号的方法。

在我的原始文本中,有些缩略词有一个6或9字形的撇号,通常出现在引号的开头和结尾,而不是标准的垂直',Spacy的处理方式也不同,所以您也可能希望在做任何NLPing之前将它们替换掉。

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

https://stackoverflow.com/questions/68718411

复制
相关文章

相似问题

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