我有两个字符串,一个输入和一个输出,当它传递给我所需的算法时,我得到一个限定字符串作为输出。但是单词的顺序与输入不匹配。如何排序输出顺序与输入顺序相同?
> def keyword_exctraction(self,new_text):
> eng_stopwords = stopwords.words('english')
> hinglish_stopwords=pd.read_csv("stopwords_hinglish.csv")
> hinglish_stop_words=hinglish_stopwords['Stop_words'].tolist()
> stop=hinglish_stop_words+eng_stopwords
> multilingual = SentenceTransformer('sentence-transformers/paraphrase-MiniLM-L6-v2')
> kw_model = KeyBERT(model=multilingual)
> doc = new_text
> keyword = kw_model.extract_keywords(doc, stop_words=stop,top_n=10,
> use_mmr=True,diversity=0.2,highlight=False)
> multilingual = SentenceTransformer('sentence-transformers/paraphrase-MiniLM-L6-v2')
> kw_model = KeyBERT(model=multilingual)
> #print(keyword)
> return keyword
> text = "i want to buy samsung smart tv 32 inch"
> keyword_extracted=self.keyword_exctraction(text)结果我运行后得到的是:关键词提取是.[(三星,0.587),(电视,0.3726),('32',0.3405),(‘英寸’,0.291),(‘买’,0.288),(‘智能’,0.2663)
输出:三星32英寸智能电视
示例:
input = "i want to buy samsung smart tv 32 inch"
output = "samsung tv 32 inch buy smart"预期结果是“购买三星智能电视32英寸”。
我尝试过排序,但它没有给出所需的输出。我怎样才能不按照他们的顺序和分数来安排他们呢?
发布于 2022-11-04 15:29:51
这是我最初评论的长篇:
首先,让我通过硬编码这里的数据来忽略提取细节:
text = 'i want to buy samsung smart tv 32 inch'
keyword_extraction = [
('samsung', 0.587),
('tv', 0.3726),
('32', 0.3405),
('inch', 0.291),
('buy', 0.288),
('smart', 0.2663)
]为了按照它们在原文中的位置对它们进行排序,只是.就这么做吧。这是幼稚的实现。查找每个索引效率低下,如果一个单词多次出现或是另一个单词的子字符串,则可能无法提供所需的输出。
just_the_keywords = [x[0] for x in keyword_extraction]
just_the_keywords.sort(key=lambda word : text.find(word))
print (just_the_keywords)然而,我不会对它们进行排序。相反,我只会重复原来的单词,但只提取关键字。这样,您就可以获得原始订单,而不必执行排序。注意"in“操作符的集合的用法。
keywords = set(just_the_keywords)
sorted_keywords = [word for word in text.split() if word in keywords]当然,将单词列表更改为单个字符串很容易。
print(' '.join(sorted_keywords))https://stackoverflow.com/questions/74302294
复制相似问题