Python pattern 包中的同义词替换

0 投票
1 回答
880 浏览
提问于 2025-04-18 15:29

我的目标是创建一个系统,可以处理任何随机文本,提取句子,去掉标点符号,然后在其中一条简单的句子上,随机替换一些标记为NN(名词)或VB(动词)的词,替换成它们的部分整体词、整体词或同义词,以及从WordNet的同义词集中找一个相似的词。虽然前面还有很多工作要做,但我在一开始就遇到了问题。

为此,我使用了pattern和TextBlob这两个库。到目前为止,我做了这些……

from pattern.web import URL, plaintext
from pattern.text import tokenize
from pattern.text.en import wordnet
from textblob import TextBlob
import string

s = URL('http://www.fangraphs.com/blogs/the-fringe-five-baseballs-most-compelling-fringe-prospects-35/#more-157570').download()
s = plaintext(s, keep=[])
secam = (tokenize(s, punctuation=""))
simica = secam[15].strip(string.punctuation)
simica = simica.replace(",", "")

simica = TextBlob(simica)
simicaTg = simica.words

synsimica = wordnet.synsets(simicaTg[3])[0]
djidja = synsimica.hyponyms()

现在一切都按我想要的方式运作,但当我尝试从这个djidja变量中提取,比如说,子类词时,发现这几乎是不可能的,因为它是一个Synset对象,我无法对它进行任何操作。

有没有什么办法可以提取出在子类词列表中报告的那个词(比如说,print(djidja[2])显示的是Synset(u'bowler')……那么我该怎么只提取出'bowler'呢)?

1 个回答

2

记住,synset(同义词集合)就是一组被标记为同义词的词汇。给定一个同义词集合,你可以提取出组成它的单词:

from pattern.text.en import wordnet
s = wordnet.synsets('dog')[0] # a word can belong to many synsets, let's just use one for the sake of argument
print(s.synonyms)

这段代码的输出结果是:

Out[14]: [u'dog', u'domestic dog', u'Canis familiaris']

你还可以提取出上位词和下位词:

print(s.hypernyms())
Out[16]: [Synset(u'canine'), Synset(u'domestic animal')]
print(s.hypernyms()[0].synonyms)
Out[17]: [u'canine', u'canid']

撰写回答