0

Python を使用してさまざまな単語形式を取得するにはどうすればよいですか。以下のようなリストを作りたいと思っています。

Work=['Work','Working','Works']

私のコード:

raw = nltk.clean_html(html)
cleaned = re.sub(r'& ?(ld|rd)quo ?[;\]]', '\"', raw)
tokens = nltk.wordpunct_tokenize(cleaned)
stemmer = PorterStemmer()
t = [stemmer.stem(t) if t in Words else t for t in tokens]
text = nltk.Text(t)
word = words(n)
Words = [stemmer.stem(e) for e in word]
find = ' '.join(str(e) for e in Words)
search_words = set(find.split(' '))
sents = ' '.join([s.lower() for s in text])
blob = TextBlob(sents.decode('ascii','ignore'))
matches = [map(str, blob.sentences[i-1:i+2])     # from prev to after next
            for i, s in enumerate(blob.sentences) # i is index, e is element
            if search_words & set(s.words)]
    #return list(itertools.chain(' '.join (str(y).replace('& rdquo','').replace('& rsquo','') for y in matches))
return list(itertools.chain(*matches))
4

1 に答える 1

0

少しトリッキーでした。テキスト内の語幹を調べて、それを単語のリストにマッピングしました。また、トークン化ではそれが行われず、完全にマッピングされているため、小文字に変更しました。以下は更新されたコードです

raw = nltk.clean_html(html)
cleaned = re.sub(r'& ?(ld|rd)quo ?[;\]]', '\"', raw)
tokens = nltk.wordpunct_tokenize(cleaned)
lower = [w.lower() for w in tokens]
stemmer = PorterStemmer()
t = [stemmer.stem(t) if t in Words else t for t in lower]
text = nltk.Text(t)
word = words(n)
Words = [stemmer.stem(e) for e in word]
find = ' '.join(str(e) for e in Words)
search_words = set(find.split(' '))
sents = ' '.join([s.lower() for s in text])
blob = TextBlob(sents.decode('ascii','ignore'))
matches = [map(str, blob.sentences[i-1:i+2])     # from prev to after next
        for i, s in enumerate(blob.sentences) # i is index, e is element
        if search_words & set(s.words)]
#return list(itertools.chain(' '.join (str(y).replace('& rdquo','').replace('& rsquo','') for y in matches))

return list(itertools.chain(*matches))

于 2014-07-25T12:32:38.600 に答える