如何在python中从连接的字符串中提取有意义和频繁的单词?
我有一个串联字符串列表,如下所示,我希望将其拆分为有意义的频繁的单词。我创建的代码也给了我各种不常用的单词如何在python中从连接的字符串中提取有意义和频繁的单词?,python,python-3.x,nlp,nltk,spacy,Python,Python 3.x,Nlp,Nltk,Spacy,我有一个串联字符串列表,如下所示,我希望将其拆分为有意义的频繁的单词。我创建的代码也给了我各种不常用的单词 con_words = ["stainlesssteel", "screwhammerwing", "goldplated", "bearingball", "inchcountry"] 预期产出: {"stainlesssteel": ["stainless", "steel"], "screwhammerwing": ["screw", "hammer", "wing"], "g
con_words = ["stainlesssteel", "screwhammerwing", "goldplated", "bearingball", "inchcountry"]
预期产出:
{"stainlesssteel": ["stainless", "steel"],
"screwhammerwing": ["screw", "hammer", "wing"],
"goldplated": ["gold", "plated"],
"bearingball": ["bearing", "ball"],
"inchcountry": ["inch", "country"]}
我的代码
from nltk.corpus import words
from nltk.corpus import stopwords
#list of all words from english dictionary
words = words.words()
#list of all english stopwords
stops = list(set(stopwords.words('english')))
alphabets = [chr(x) for x in range(ord('a'), ord('z') + 1)]
cleaned_word_list = list(set(words)|set(stops))
cleaned_word_list = list(set(cleaned_word_list)|set(alphabets))
cleaned_word_dict = dict((i, 0) for i in cleaned_word_list)
def extract_words(x):
res = []
subs = [x[i:j+1] for i in range(len(x)) for j in range(i,len(x))if (i - (j+1)) < -1]
for sub in subs:
try:
l = cleaned_word_dict[sub]
res.append(str(sub))
except:
pass
return sorted(res, key = len, reverse=True)
common_words_dict = dict((i, extract_words(str(i))[:5]) for i in con_words)
还有别的方法吗
请帮助我了解如何获得预期的输出
提前感谢我认为获得预期输出的最简单方法(尽管它可能会占用大量内存)是在第一个输出上运行extract_words()函数,但删除其他答案中包含的单词。这将防止出现零碎的单词(‘不锈钢’-‘污渍’;‘锤子’-‘安默’),并且仍然允许出现多个完整单词。
一旦我做了一些有用的东西,我将用代码更新我的答案。我认为获得预期输出(尽管它可能会占用大量内存)的最简单方法是在第一个输出上运行extract_words()函数,但删除其他答案中包含的单词。这将防止出现零碎的单词(‘不锈钢’-‘污渍’;‘锤子’-‘安默’),并且仍然允许出现多个完整单词。
一旦我做了一些有用的东西,我会用代码更新我的答案。你的代码正是按照你的要求去做的,简而言之,你是在告诉你的程序“根据这个语料库给我这个单词中所有的字符串组合”。如果你只想要前两个答案,我建议你把所有的结果放在一个列表中,并相应地对列表进行切片。你的代码正是按照你的要求执行的,简而言之,你告诉你的程序“根据这个语料库,给我这个单词中所有字符串的组合”。如果你只想要前两个答案,我建议把你所有的结果放在一个列表中,并相应地对列表进行切片。
{'stainlesssteel': ['stainless', 'stain', 'steel', 'tain', 'less'],
'screwhammerwing': ['hammer', 'screw', 'ammer', 'crew', 'wham'],
'goldplated': ['plated', 'plate', 'lated', 'gold', 'plat'],
'bearingball': ['bearing', 'earing', 'bear', 'ring', 'ball'],
'inchcountry': ['country', 'count', 'inch', 'try', 'in']}