gpt4 book ai didi

Python:如何按子字符串相关性对字符串列表进行排序?

转载 作者:太空宇宙 更新时间:2023-11-04 07:56:40 24 4
gpt4 key购买 nike

我有一些字符串列表,例如:

["foo bar SOME baz TEXT bob",
"SOME foo bar baz bob TEXT",
"SOME foo TEXT",
"foo bar SOME TEXT baz",
"SOME TEXT"]

我希望它按 SOME TEXT 子字符串的准确性排序(大写无关紧要)。像这样的命令:

["SOME TEXT",
"foo bar SOME TEXT baz",
"SOME foo TEXT",
"foo bar SOME baz TEXT bob",
"SOME foo bar baz bob TEXT"]

想法是 - 最好的分数获得与子字符串单词位置最匹配的字符串。对于子字符串单词之间的更多“草率”单词 - 它获得的顺序越低。

我找到了一些图书馆,比如 fuzzyset , 或 Levenshtein distance但我不确定这是我需要的。据我所知,我知道我想要排序的确切子字符串,并且那些库搜索相似的词。

实际上,在我的 Django 项目中进行一些数据库查询 (Postgresql) 之后,我需要执行此排序。我已经尝试使用它的 ORM 进行全文搜索,但没有得到这个相关的排序顺序(它不计算子字符串单词之间的距离)。接下来我尝试了 Haystack+Whoosh,但此时也没有找到如何在那里进行此类操作的信息。所以现在的想法是获取查询集,然后将其从数据库中排序(是的,我知道这可能是一个错误的决定,但现在我希望它能正常工作)。但是,如果有人告诉我如何在我在这里提到的任何技术中做到这一点——那也将非常酷。谢谢!

附注在最多 20 个单词的字符串中,子字符串的长度应该是 2-10 个单词。

最佳答案

您可以使用 difflib.SequenceMatcher ,以实现与您想要的输出非常相似的结果:

>>> import difflib
>>> l = ["foo bar SOME baz TEXT bob", "SOME foo bar baz bob TEXT", "SOME foo TEXT", "foo bar SOME TEXT baz", "SOME TEXT"]
>>> sorted(l, key=lambda z: difflib.SequenceMatcher(None, z, "SOME TEXT").ratio(), reverse=True)
['SOME TEXT', 'SOME foo TEXT', 'foo bar SOME TEXT baz', 'foo bar SOME baz TEXT bob', 'SOME foo bar baz bob TEXT']

如果你看不出唯一的区别是 "foo bar SOME TEXT baz""SOME foo TEXT" 这两个元素的位置被交换了到您想要的输出。

关于Python:如何按子字符串相关性对字符串列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47682491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com