python - 将 POS 标签从 TextBlob 转换为 Wordnet 兼容输入

标签 python tags nlp nltk textblob

我正在使用 Python 和 nltk + Textblob 进行一些文本分析。有趣的是,您可以为 wordnet 添加 POS 以使同义词搜索更加具体,但不幸的是 nltk 和 Textblob 中的标记与 wordnet 对其同义词集类期望的输入类型不“兼容”。

示例 Wordnet.synsets() 要求您提供的 POS 是 n、v、a、r 之一,如下所示

wn.synsets("dog", POS="n,v,a,r")

但是来自 upenn_treebank 的标准 POS 标记看起来像

JJ, VBD, VBZ, etc.

所以我正在寻找一种在两者之间进行转换的好方法。

除了暴力之外,有谁知道实现这种转换的好方法吗?

最佳答案

如果 textblob 使用 PennTreeBank (ptb) 标记集,则只需使用 POS 标记中的第一个字符来映射到 WN pos 标记。

WN POS 标记集包括“a”= 形容词/副词、“s”= 卫星形容词、“n”= 名词和“v”= 动词。

尝试:

>>> from nltk import word_tokenize, pos_tag
>>> from nltk.corpus import wordnet as wn
>>> text = 'this is a pos tagset in some foo bar paradigm'
>>> pos_tag(word_tokenize(text))
[('this', 'DT'), ('is', 'VBZ'), ('a', 'DT'), ('pos', 'NN'), ('tagset', 'NN'), ('in', 'IN'), ('some', 'DT'), ('foo', 'NN'), ('bar', 'NN'), ('paradigm', 'NN')]
>>> for tok, pos in pos_tag(word_tokenize(text)):
...     pos = pos[0].lower()
...     if pos in ['a', 'n', 'v']:
...             wn.synsets(tok, pos)
... 
[Synset('be.v.01'), Synset('be.v.02'), Synset('be.v.03'), Synset('exist.v.01'), Synset('be.v.05'), Synset('equal.v.01'), Synset('constitute.v.01'), Synset('be.v.08'), Synset('embody.v.02'), Synset('be.v.10'), Synset('be.v.11'), Synset('be.v.12'), Synset('cost.v.01')]
[Synset('polonium.n.01'), Synset('petty_officer.n.01'), Synset('po.n.03'), Synset('united_states_post_office.n.01')]
[]
[]
[Synset('barroom.n.01'), Synset('bar.n.02'), Synset('bar.n.03'), Synset('measure.n.07'), Synset('bar.n.05'), Synset('prevention.n.01'), Synset('bar.n.07'), Synset('bar.n.08'), Synset('legal_profession.n.01'), Synset('stripe.n.05'), Synset('cake.n.01'), Synset('browning_automatic_rifle.n.01'), Synset('bar.n.13'), Synset('bar.n.14'), Synset('bar.n.15')]
[Synset('paradigm.n.01'), Synset('prototype.n.01'), Synset('substitution_class.n.01'), Synset('paradigm.n.04')]

关于python - 将 POS 标签从 TextBlob 转换为 Wordnet 兼容输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24975499/

相关文章:

Python——重构后的程序返回不同的结果

从文本中检测短语和关键字的算法

python - 将安全过滤器应用于连接的 html 字符串

python - 二进制转十进制(数学方式)

python - 为什么我的 C++ 文本文件解析脚本比我的 Python 脚本慢得多?

html - "img tag"内的 "a tag"的工具提示

php - 遇到撇号时工具提示会损坏

Java JAXB 编码器更改 < 但不更改 > 的编码

python - 我应该使用哪个 gensim 语料库类来加载 LDA 转换后的语料库? - Python

java - 检查字符串是否是语法上有效的句子?