算法在字符串中查找关键字和关键短语查找关键字或关键字。该字符串包含:该算法具有以下要求:在批处理场景中运行,例如每天运行一次或两次处理长度从200到7000个字符不等的字符串在不到1小时内处理1000个字符串将在具有中等能力的服务器上执行,使用以下语言之一编写:C#、VB.NET或T-SQL或者也许甚至F#、Python或Lua等。不依赖于预定义的关键字或关键短语列表,但可以依赖关键字排除列表,例如“and”、“the”、“go”等。理想情况下可翻译成其他语言,例如不依赖于特定语言的功能,例如元编程输出关键短语列表(按频率降序排列)后跟关键字列表(按频率降序排列)如果它可以在几秒钟内处理多达8000个字符,那么真的很酷,所以它实时运行,但我受够了!只是寻找建议和方向:非常感谢。PS将从SQLServer2008R2数据库中检索字符串,因此理想情况下该语言将支持这一点,否则它必须能够读取/写入STDOUT、管道、流或文件等。所涉及的逻辑使T-SQL中的编程变得复杂。选择一种语言,例如C#。首先尝试制作一个简单的桌面应用程序。之后,如果您发现将所有记录加载到该应用程序中太慢,您可以编写一个在SQL-Server上执行的C#存储过程。根据SQL-Server的安全策略,它需要有一个强键。现在到算法。排除词列表通常称为停用词列表。如果您对该搜索词进行一些谷歌搜索,您可能会找到一个可以开始使用的停用词列表。将这些停用词添加到HashSet(我将在此处使用C#)//假设每一行都包含一个停用词。HashSetstopWords=newHashSet(File.ReadLines("C:stopwords.txt"),StringComparer.OrdinalIgnoreCase);稍后您可以查看关键字候选者是否在停用词列表中If(!stopWords.Contains(candidate)){//我们有一个关键字}HashSets很快。它们具有O(1)访问时间,这意味着执行查找所需的时间不取决于它包含的项目数。使用Regex可以轻松查找关键字。字符串文本=...;//从DBMatchCollection加载文本matches=Regex.Matches(text,"[az]([:']?[az])*",RegexOptions.IgnoreCase);foreach(匹配匹配匹配){如果(!stopWords.Contains(match.Value)){ProcessKeyword(match.Value);//在这里做任何你需要做的事情}}如果你发现az对字母的限制太多并且需要重音字母,你可以将正则表达式更改为@"p{L}([:']?p{L})*".字符类p{L}包含所有字母和字母修饰符。这些短语比较复杂。您可以尝试先将文本拆分为短语,然后对这些短语应用关键字搜索,而不是在整个文本中搜索关键字。这还将为您提供短语中的关键字数量。将文本拆分为短语涉及搜索以“.”结尾的句子。任何一个”?”或者”!”或者”:”。您应该排除单词中出现的点和冒号。string[]phrase=Regex.Split(text,@"[.?!:](s|$)");这会在空格或行尾后搜索标点符号。但我不得不承认它并不完美。它可能会错误地将缩写检测为句子结尾。您将不得不尝试改进拆分机制。以上就是《C#学习教程:字符串中查找关键词和关键短语的算法》的全部内容。代表立场,如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
