python - 有没有办法在 python nltk 中反转词干?
问题描述
我有一个 NLTK/python 中的词干列表,并希望获得创建该词干的可能单词。
有没有办法在 python 中获取一个词干并获取一个词干列表?
解决方案
据我所知,答案是否定的,并且根据词干分析器的不同,可能很难想出详尽的搜索来恢复词干规则的效果,并且结果大部分都是无效的词。例如对于波特词干分析器:
from nltk.stem.porter import *
stemmer = PorterStemmer()
stemmer.stem('grabfuled')
# results in "grab"
因此,反向函数将生成“grabfuled”,因为“-ed”和“-ful”后缀在词干处理过程中被连续删除。但是,给定一个有效的词典,您可以执行以下独立于词干提取方法的操作:
from nltk.stem.porter import *
from collections import defaultdict
vocab = set(['grab', 'grabbing', 'grabbed', 'run', 'running', 'eat'])
# Here porter stemmer, but can be any other stemmer too
stemmer = PorterStemmer()
d = defaultdict(set)
for v in vocab:
d[stemmer.stem(v)].add(v)
print(d)
# defaultdict(<class 'set'>, {'grab': {'grab', 'grabbing', 'grabbed'}, 'eat': {'eat'}, 'run': {'run', 'running'}})
现在我们有一个字典,可以将词干映射到可以生成它们的有效词。对于任何词干,我们可以执行以下操作:
print(d['grab'])
# {'grab', 'grabbed', 'grabbing'}
为了构建词汇表,您可以标记语料库或使用nltk 的内置英语单词词典。
推荐阅读
- c++ - 如何将这个 for 循环从二叉树方法转移到 C++ 中将期权价格定价为递归
- kubernetes - Kubernetes 中的 JMS 2.0 持久订阅主题最佳实践
- java-8 - 如何比较源列表是否不包含使用 Java 8 的目标列表中存在的任何对象?
- sql-server - 使用链接服务器连接将数据从 IBM i 系列数据库表插入 SNOWFLAKE 数据库表
- laravel - 在 laravel 中注册用户时,它也会在后台自动注册 chamilo
- c# - C# CS1737 来自接口方法
- split - 在拆分重叠时拆分 [RAKU]
- java - Java 使用正则表达式从字符串中删除文本
- node.js - 在nestJs中模拟Date.Now toHaveBeenCalledWith
- java - 在 CentO 上运行 Selenium 框架