首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于查看字符串中是否存在关键字的算法

用于查看字符串中是否存在关键字的算法
EN

Stack Overflow用户
提问于 2010-04-23 00:12:27
回答 6查看 2.1K关注 0票数 5

假设我在数组中有一组关键字{“奥运会”,“体育网球最佳”,“网球”,“网球规则”}

然后我有一个很大的字符串列表(一次最多50个)(或者实际上是tweet),所以它们最多140个字符。

我想查看每个字符串,看看那里有哪些关键字。在一个关键字由多个单词组成的情况下,例如"sports string“,这些单词不一定要在字符串中放在一起,但它们必须全部出现。

我很难找出一个高效的算法来做这件事。

你们对此有什么建议吗?谢谢!

编辑:为了更好地解释,每个关键字都有一个关联的id,所以{1:“奥运会”,2:“体育网球最佳”,3:“网球”,4:“网球规则”}

我想浏览一下字符串/tweet列表,看看哪组关键字匹配。输出应该是,这条推文属于关键字#4。(可能会有多个匹配,所以任何匹配关键字2的都会匹配3 -since,它们都包含网球)。

当关键字中有多个单词时,例如“运动网球最佳”,它们不必一起出现,但必须全部出现。例如,这将正确地匹配:“我刚打过网球,我喜欢运动,这是最好的”……因为这个字符串包含"sports tennis“,所以它将匹配并与keywordID相关联(在本例中为2)。

编辑2:不区分大小写。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-04-23 00:17:39

代码语言:javascript
复制
IEnumerable<string> tweets, keywords;

var x = tweets.Select(t => new
                           {
                               Tweet = t,
                               Keywords = keywords.Where(k => k.Split(' ')
                                                               .All(t.Contains))
                                                  .ToArray()
                           });
票数 6
EN

Stack Overflow用户

发布于 2010-04-23 00:18:37

可以使用几种算法非常有效地搜索多个模式,例如algorithm of (使用trie)或来自的算法。

如果性能很重要,我建议使用这两种方法之一。要在多个字符串中进行搜索,最有效的方法可能是将所有50个字符串连接成一个更大的字符串,并记录单个字符串的起始位置。

票数 1
EN

Stack Overflow用户

发布于 2010-04-23 00:20:30

也许是这样的?

代码语言:javascript
复制
        string[] keywords = new string[] {"olympics", "sports tennis best", "tennis", "tennis rules"};

        string testString = "I like sports and the olympics and think tennis is best.";

        string[] usedKeywords = keywords.Where(keyword => keyword.Split(' ').All(s => testString.Contains(s))).ToArray();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2692544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档