- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要有关如何编写算法以在字符串中查找关键字或关键短语的建议或指导。
字符串包含:
算法有如下要求:
如果它能在几秒钟内处理多达 8000 个字符,这样它就可以实时运行,那就更酷了,但我的要求已经够多了!
只是寻求建议和方向:
非常感谢。
附言字符串将从 SQL Server 2008 R2 数据库中检索,因此理想情况下该语言应支持这一点,如果不支持,则它必须能够读取/写入 STDOUT、管道、流或文件等。
最佳答案
所涉及的逻辑使得在 T-SQL 中进行编程变得复杂。选择一种语言,例如 C#。首先尝试制作一个简单的桌面应用程序。之后,如果您发现将所有记录加载到此应用程序太慢,您可以编写一个在 SQL-Server 上执行的 C# 存储过程。根据 SQL-Server 的安全策略,它需要有一个强 key 。
现在到算法。排除词列表通常称为停用词列表。如果您对该搜索词进行一些谷歌搜索,您可能会找到可以开始使用的停用词列表。将这些停用词添加到 HashSet<T>
(我将在这里使用 C#)
// Assuming that each line contains one stop word.
HashSet<string> stopWords =
new HashSet<string>(File.ReadLines("C:\stopwords.txt"), StringComparer.OrdinalIgnoreCase);
稍后您可以查看关键字候选者是否在停用词列表中
If (!stopWords.Contains(candidate)) {
// We have a keyword
}
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
}
}
如果您发现 a-z 对字母的限制太多并且需要重音字母,您可以将正则表达式更改为 @"\p{L}([:']?\p{L})*"
.字符类 \p{L}
包含所有字母和字母修饰符。
短语比较复杂。您可以尝试先将文本拆分为短语,然后对这些短语应用关键字搜索,而不是在整个文本中搜索关键字。这会同时为您提供一个短语中的关键字数量。
将文本拆分为短语涉及搜索以“.”结尾的句子。要么 ”?”要么 ”!”要么 ”:”。您应该排除单词中出现的点和冒号。
string[] phrases = Regex.Split(text, @"[\.\?!:](\s|$)");
这会搜索标点符号后跟空格或行尾。但我必须承认这并不完美。它可能会错误地将缩写检测为句子结尾。您将不得不进行实验以改进拆分机制。
关于c# - 在字符串中查找关键字和关键短语的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11005687/
我们正在使用一个脚本,它会返回以下内容120007CONSULTA DE DEUDA CORRECTA.01TEST我正在尝试从awk中获得 CONSULTA DE DEUDA CORRECTA 的短
我正在使用以下查询: { "_source": [ "title", "bench", "id_", "court",
例如,我有数十亿个短语,我想要将相似的短语聚集在一起。 > strings.to.cluster <- c("Best Toyota dealer in bay area. Drive out wit
我有一个包含大约 1000 个关键字/短语(一到四个字长)的数据库表 - 这个表很少更改,所以我可以将数据提取到更有用的东西中(比如正则表达式?) - 所以这没有找到/基于自然语言处理猜测关键词..
我想确保我从一开始就做对了,但我找不到好的答案,所以我想问一下。 我要做的是以下内容。 以一句话为例:The quick brown fox jumped over the lazy dog"并使用全
我有一个表单,其中有两个单选按钮。 应该从字符串中搜索整个字符串,第二个应该搜索至少一个单词。 例如: 我将搜索“Awesome ideas for startup”。 如果我选中“搜索整个字符串/短
我有... 一组固定关键字和词组(大约 1,000,000 个),例如 birthday、happy new year、vacation等 10 到 500 字之间的一些可变文本。 我想…… 识别文本
有没有办法删除字符串中重复的和连续的单词/短语?例如。 [in]: foo foo bar bar foo bar [out]: foo bar foo bar 我试过这个: >>> s = 'thi
我正在寻找一种在文本中搜索短语或惯用表达的方法,无论时态或可能的介词/副词如何,例如如果我正在寻找 call off我还想找到 My boss called the meeting off. 之类的用
PowerShell 有一些语法特性,我找不到太多相关文档。今天我的问题是 ? {...} 例子 PS> Get-SPServiceInstance | ? {$_.GetType.toString(
我通过 PHP 使用 Solr 来搜索我网站的各个方面。我正在尝试实现一项功能,但找不到任何有关如何实现它的信息。 我有一组文档(评论),每个文档都与特定产品有关。 我想找到出现在单个产品的多条评论中
我正在从事自然语言生成任务,需要检索与 Cyc 术语等效的自然语言单词或短语。例如。 “#$EatingEvent”->“吃”或“#$Coyote-Animal”->“土狼”。 如何通过 Java A
我在使用 Java 中的以下正则表达式时遇到问题。我删除了双引号,以使其更具可读性。由于缺乏更好的词,我还将每个“组件”放在单独的行上(但实际的表达式会将行合并,行之间没有空格): (?:\bIN(?
我有一个 MySQL 数据库,我正在尝试使用 PHP 获取趋势主题(流行短语或单词)。我尝试了一些查询,但似乎没有什么对我有用。 最佳答案 您可以尝试创建一个包含两列的新表:WORD 和 COUNT,
我在 MySql 中有一个包含城市的表。 |---------------------|------------------| | ID | City
我正在处理搜索页面上的用户输入。如果用户选择“所有单词”类型的搜索,那么我会从搜索文本中删除所有 bool 搜索运算符,并在每个真实单词之间添加 ' AND '。在大多数情况下非常简单。但是,我不知道
我使用的语音识别软件给出的结果不是最佳的。 例如:session 返回为 fashion 或 mission。 现在我有一本像这样的字典: matches = { 'session': ['fas
我厌倦了使用 Gimp 无休止地滚动所有字体来不规律地搜索完美字体,所以我想:“为什么不为每种字体构建一个可视的 pangrams 列表”。 因此,我尝试构建一个 php 脚本,该脚本在 .fonts
如何编写一个 RegEx 模式来测试一个字符串是否包含多个具有以下结构的子字符串: "cake.xxx" xxx 是任何东西,但不是“奶酪”、“牛奶”或“黄油”。 例如: “我有一个 cake.hon
我有一个字段“部门”,它是一个列表:{“部门”:[“餐饮服务”,“软件开发”,“制造”,“部署”]}' 我想聚合“部门”中以“d”开头的元素。即,从所有记录进行部署。 我能够找到包含一个前缀为“d”但
我是一名优秀的程序员,十分优秀!