【问题标题】:Create wordforms using python使用python创建词形
【发布时间】:2014-07-25 09:43:25
【问题描述】:

如何使用 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))

【问题讨论】:

  • 你到底想做什么?你试过什么?
  • 不知道有没有“reverse stemming”之类的东西。您最好的机会可能是获取一个大型语料库,对其进行词干化,然后记住词干对应的词干。
  • @pfnuesel 我知道如何词干。现在我想对词干分析器进行逆向工程。需要将词干限制为列表中的单词。所以我需要用各种词形的英语实际结尾来转换这个词。我试过但不行
  • @tobias_k 那么我可以将标记的词干限制在文本中的单词中吗?我不想阻止整个文本。我正在添加上面的代码
  • 另外,知道你需要这个词形列表的用途可能会很有趣。也许有更好的方法。

标签: python nlp nltk textblob


【解决方案1】:

这有点棘手。我试图查看文本中的词干形式,然后将其与单词列表进行映射。我也把它改成了小写,因为标记化并没有做到这一点,而且它映射得很好。以下是更新后的代码

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

返回列表(itertools.chain(*matches))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    • 2021-10-25
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多