【发布时间】:2018-05-20 19:38:32
【问题描述】:
我有一些字符串列表,例如:
["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,但此时也没有找到如何在那里进行这种排序的信息。所以现在的想法是获取查询集,然后将其从数据库中排序(是的,我知道这可能是一个糟糕的决定,但现在我希望它能够正常工作)。但是,如果有人告诉我如何在任何技术中做到这一点,我已经在这里提到过——那也将非常酷。谢谢!
附言子串的长度应该是 2-10 个字,最多 20 个字的字符串。
【问题讨论】: