我需要实现某种字符串/文本匹配 我有两个我需要匹配的视频游戏标题(名称)列表 使用EntityFramework6从其他数据中的DB中获取列表。一条记录包含两个unicode字符串,分隔的标题前缀和标题的其余部分。
列表A的示例:
prefix title
An | Amazing race
An | Amazing Race 2
| Super Racer
The | Death race: Revenge
| reveng of Björn the Dead racer: game with really long title
...
错别字和不一致是故意显示数据的性质 列表A可由用户编辑,包括手动输入的新记录,因此可能存在拼写错误,拼写单词等 首先,我目前正在通过列表B的一条记录,尝试将其与A中的某条记录相匹配或获得“不匹配”,并进行简单的不区分大小写的比较。显然不是一个很好的解决方案。
列表B可以是:
| AmazingRace
| Amazing Race
An | amazing race 2: Even More Amazing
| AmazingRace3
| Gatez of C'thu'thotz: You will die every minute or possibly more
...
记录有非独特的,可能是One A:很多B.
我有一个视图,每个列表中有100个,最多约1000个记录。
我正在考虑创建自己的简单单词索引系统,因为数据显示在DataGrid中,所以我想无论如何都会在以后需要它,以便更快地进行过滤和搜索。虽然我没有实施索引的经验。 (我的经历以per char Trie结束)
另一个选择是使用现有的强大系统,如Lucene.net,虽然从我发现:它的目标是全文所以我不确定它是否适用于我的情况,它可能有问题与不那么多游戏世界或非英文标题中常见的自然语言词汇?
另外,我可能还有另一个更好的选择。
非常感谢有关如何最好地解决这个问题的建议 (请原谅我不太好的英语)
答案 0 :(得分:1)
有一种很好的方法可以非常有效地比较两个数据集。这种技术称为 SimHash 。总之,它根据文本包含的子字符串为文本创建指纹(整数值)。好处是您可以使用这些指纹来比较文档而不是完整的文本,并且它更快,因为它是一个整数值。
这里有一些开头的链接:
PS。如果您有任何疑问或需要更多信息,我可以更新我的答案。