将应用程序从一个开发平台转换为VB.NET / SQL Server。
用户具有一些功能,他们可以输入短语,并且可以对文本进行数据库搜索。
原始代码的维护者无法(或不愿意)向我提供当前使用的任何逻辑或代码。
我的一位用户联系人告诉我"搜索机制"确定短语中的动词并从那里开始工作。
我们正在使用SQL Server 2008 R2。我们不允许使用CLR代码。 有没有人知道使用T-SQL确定语音部分的任何方法?
如果我有SQL Server 2012,我会使用模糊搜索来完成这项工作,但我们不会。
==========
更新: 虽然我不做名词/动词/词性查找我现在的做词典/词组查找的方法是基于关键词并做以下...
我将搜索的短语拆分为关键字。
我使用Like来搜索我的词典(术语和示例)或搜索词列表中的任何单词。
对于那些候选人,我做了一系列的计数。我计算原始短语上的EXACT匹配数,然后计算匹配关键字的数量。
最后,我使用T-SQL Levenshtein算法来计算"差异距离"。
然后我按照总匹配数/ Levenshtein值的顺序返回匹配。
它是最好的"我能做到......
答案 0 :(得分:1)
您可以使用布隆过滤器来执行此操作...
https://en.wikipedia.org/wiki/Bloom_filter
布隆过滤器可用作拼写检查和纠正的机制。它通过识别字典中的单词(在你的字符串中)来工作......例如,你的字典将包含动词
这里是动词的列表,例如你将存储在[Bloom Filter]字典
中http://www.worldclasslearning.com/english/five-verb-forms.html
然后它们将与你的字符串中的单词匹配.......
我的网站上有一个示例,但是当我上次检查该网站时,服务器已关闭。一旦它再次可用,我将发布一个示例和演示的链接...
同时,这是一个例子,它是用C#编写的,但是......
https://gist.github.com/richardkundl/8300092
好的,所以我的网站又重新开始......这里是一个Bloom Filter的VB示例的链接。它是一个控制台演示,用于说明布隆过滤器的工作原理......
http://gsidev.somee.com/#3&84335AB075764976B53A90E9B1522000&vb
这是一个小型VB.net和C#演示应用程序的链接,使用我创建的winform控件....还有一个演示视频......
http://gsidev.somee.com/#4&F69A67EE2E44492EA53A9537FD94F3FD&info
你可以基本上颠倒识别'正确'拼写单词的逻辑,而不是识别动词或名词....那么,你可以简单地拥有每个单词的字典(就像你使用拼写检查器一样)动词或名词词典......
就速度而言,Bloom Filter非常有效,如果你正确地调整它,即使使用10000字的词典,它也不能简单地将给定的字符串与字符串列表进行比较(这将需要永远)。 ......它比那复杂一点......理论上说一个给定的单词是“可能在集合中”或“绝对不在集合中”,即“它可能拼写正确,或者它绝对拼写不正确”听起来有点愚蠢,但实际上非常准确,大约97% - 98%的时间......