Python pattern 包中的同义词替换
我的目标是创建一个系统,可以处理任何随机文本,提取句子,去掉标点符号,然后在其中一条简单的句子上,随机替换一些标记为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']