Chr*_*non 12 c# sql sql-server algorithm search
我需要有关如何编写算法的建议或指示,该算法将在字符串中找到关键字或关键字.
该字符串包含:
该算法具有以下要求:
如果它可以在几秒钟内处理多达8000个字符,那将是非常酷的,所以它可以实时运行,但我已经足够了!
只是寻找建议和方向:
非常感谢.
PS将从SQL Server 2008 R2数据库中检索字符串,因此理想情况下该语言将支持此功能,否则它必须能够读取/写入STDOUT,管道,流或文件等.
Oli*_*bes 11
所涉及的逻辑使得在T-SQL中编程变得复杂.选择像C#这样的语言.首先尝试制作一个简单的桌面应用程序.稍后,如果您发现将所有记录加载到此应用程序的速度太慢,您可以编写在SQL-Server上执行的C#存储过程.根据SQL-Server的安全策略,它需要具有强密钥.
现在到算法.排除单词列表通常称为停用词列表.如果您对此搜索字词进行了一些Google搜索,您可能会找到可以开始使用的停用词列表.将这些停用词添加到HashSet<T>(我将在这里使用C#)
// Assuming that each line contains one stop word.
HashSet<string> stopWords =
new HashSet<string>(File.ReadLines("C:\stopwords.txt"), StringComparer.OrdinalIgnoreCase);
Run Code Online (Sandbox Code Playgroud)
稍后您可以查看候选关键字候选词是否在停用词列表中
If (!stopWords.Contains(candidate)) {
// We have a keyword
}
Run Code Online (Sandbox Code Playgroud)
HashSets很快.他们有O(1)的访问时间,这意味着做一个查找所需要的时间不依赖于它所包含的数项.
使用Regex可以轻松查找关键字.
string text = ...; // Load text from DB
MatchCollection matches = Regex.Matches(text, "[a-z]([:']?[a-z])*",
RegexOptions.IgnoreCase);
foreach (Match match in matches) {
if (!stopWords.Contains(match.Value)) {
ProcessKeyword(match.Value); // Do whatever you need to do here
}
}
Run Code Online (Sandbox Code Playgroud)
如果您发现az对字母的限制太多而需要重音字母,则可以将正则表达式更改为@"\p{L}([:']?\p{L})*".字符类\p{L}包含所有字母和字母修饰符.
这些短语更复杂.您可以尝试先将文本拆分为短语,然后对这些短语应用关键字搜索,而不是在整个文本中搜索关键字.这将同时为您提供短语中关键字的数量.
将文本拆分为短语涉及搜索以"."结尾的句子.要么 "?" 要么 "!" 要么 ":".您应该排除单词中出现的点和冒号.
string[] phrases = Regex.Split(text, @"[\.\?!:](\s|$)");
Run Code Online (Sandbox Code Playgroud)
这会在空格或行尾之后搜索标点符号.但我必须同意这不完美.它可能错误地将缩写检测为句末.您将不得不进行实验以改进分裂机制.
| 归档时间: |
|
| 查看次数: |
11592 次 |
| 最近记录: |