Question

My goal is to create a system that will be able to take any random text, extract sentences, remove punctuations, and then, on the bare sentence (one of them), to randomly replace NN or VB tagged words with their meronym, holonym or synonim as well as with a similar word from a WordNet synset. There is a lot of work ahead, but I have a problem at the very beginning.

For this I use pattern and TextBlob packages. This is what I have done so far...

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()

Now everything works the way I want but when I try to extract the i.e. hyponym from this djidja variable it proves to be impossible since it is a Synset object, and I can't manipulate it anyhow.

Any idea how to extract a the very word that is reported in hyponyms list (i.e. print(djidja[2]) displays Synset(u'bowler')...so how to extract only 'bowler' from this)?

Was it helpful?

Solution

Recall that a synset is just a list of words marked as synonyms. Given a sunset, you can extract the words that form it:

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)

This outputs:

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

You can also extract hypernims and hyponyms:

print(s.hypernyms())
Out[16]: [Synset(u'canine'), Synset(u'domestic animal')]
print(s.hypernyms()[0].synonyms)
Out[17]: [u'canine', u'canid']
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top