首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >排序输出顺序与输入字符串顺序相同

排序输出顺序与输入字符串顺序相同
EN

Stack Overflow用户
提问于 2022-11-03 11:25:31
回答 1查看 47关注 0票数 0

我有两个字符串,一个输入和一个输出,当它传递给我所需的算法时,我得到一个限定字符串作为输出。但是单词的顺序与输入不匹配。如何排序输出顺序与输入顺序相同?

代码语言:javascript
运行
复制
> 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英寸智能电视

示例:

代码语言:javascript
运行
复制
input = "i want to buy samsung smart tv 32 inch"
output = "samsung tv 32 inch buy smart"

预期结果是“购买三星智能电视32英寸”。

我尝试过排序,但它没有给出所需的输出。我怎样才能不按照他们的顺序和分数来安排他们呢?

EN

回答 1

Stack Overflow用户

发布于 2022-11-04 15:29:51

这是我最初评论的长篇:

首先,让我通过硬编码这里的数据来忽略提取细节:

代码语言:javascript
运行
复制
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)
]

为了按照它们在原文中的位置对它们进行排序,只是.就这么做吧。这是幼稚的实现。查找每个索引效率低下,如果一个单词多次出现或是另一个单词的子字符串,则可能无法提供所需的输出。

代码语言:javascript
运行
复制
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“操作符的集合的用法。

代码语言:javascript
运行
复制
keywords = set(just_the_keywords)
sorted_keywords = [word for word in text.split() if word in keywords]

当然,将单词列表更改为单个字符串很容易。

代码语言:javascript
运行
复制
print(' '.join(sorted_keywords))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74302294

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档