T-SQL在字符串文本中确定名词和动词

时间:2016-02-12 12:52:24

标签: sql vb.net tsql sql-server-2008-r2 vb.net-2010

将应用程序从一个开发平台转换为VB.NET / SQL Server。

用户具有一些功能,他们可以输入短语,并且可以对文本进行数据库搜索。

原始代码的维护者无法(或不愿意)向我提供当前使用的任何逻辑或代码。

我的一位用户联系人告诉我"搜索机制"确定短语中的动词并从那里开始工作。

我们正在使用SQL Server 2008 R2。我们不允许使用CLR代码。 有没有人知道使用T-SQL确定语音部分的任何方法?

如果我有SQL Server 2012,我会使用模糊搜索来完成这项工作,但我们不会。

==========

更新: 虽然我不做名词/动词/词性查找我现在的做词典/词组查找的方法是基于关键词并做以下...

我将搜索的短语拆分为关键字。

我使用Like来搜索我的词典(术语和示例)或搜索词列表中的任何单词。

对于那些候选人,我做了一系列的计数。我计算原始短语上的EXACT匹配数,然后计算匹配关键字的数量。

最后,我使用T-SQL Levenshtein算法来计算"差异距离"。

然后我按照总匹配数/ Levenshtein值的顺序返回匹配。

它是最好的"我能做到......

1 个答案:

答案 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%的时间......