首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于从句子中获取单词的Linq

用于从句子中获取单词的Linq
EN

Stack Overflow用户
提问于 2019-06-03 19:28:06
回答 3查看 902关注 0票数 4

我有一个单词列表和一个句子列表。我想知道在which 中可以找到哪些句子。

下面是我的代码:

代码语言:javascript
复制
List<string> sentences = new List<string>();
List<string> words = new List<string>();

sentences.Add("Gallia est omnis divisa in partes tres, quarum unam incolunt Belgae, aliam Aquitani, tertiam qui ipsorum lingua Celtae, nostra Galli appellantur.");
sentences.Add("Alea iacta est.");
sentences.Add("Libenter homines id, quod volunt, credunt.");

words.Add("est");
words.Add("homines");

List<string> myResults = sentences
  .Where(sentence => words
     .Any(word => sentence.Contains(word)))
  .ToList();

我需要的是一个元组列表。在句子中找到的句子和单词。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-06-03 19:48:32

你可以试试这种方式,

代码语言:javascript
复制
var result = from sentence in sentences
             from word in words
             where sentence.Contains(word)
             select Tuple.Create(sentence, word);
票数 3
EN

Stack Overflow用户

发布于 2019-06-03 19:58:03

首先,我们必须定义什么是word。可以是字母和撇号的任意组合。

代码语言:javascript
复制
  Regex regex = new Regex(@"[\p{L}']+");

其次,我们应该思考我们应该如何处理case。让我们实现不区分大小写的例程:

代码语言:javascript
复制
  HashSet<string> wordsToFind = new HashSet<string>(StringComparer.OrdinalIgnoreCase) {
    "est",
    "homines"
  };

然后我们可以使用Regex来匹配句子中的单词,并使用Linq来查询句子:

代码:

代码语言:javascript
复制
  var actualWords = sentences
    .Select((text, index) => new {
      text = text,
      index = index,
      words = regex
        .Matches(text)
        .Cast<Match>()
        .Select(match => match.Value)
        .ToArray()
    })
    .SelectMany(item => item.words
       .Where(word => wordsToFind.Contains(word))
       .Select(word => Tuple.Create(word, item.index + 1)));

  string report = string.Join(Environment.NewLine, actualWords);

  Console.Write(report);

结果:

代码语言:javascript
复制
  (est, 1)         // est appears in the 1st sentence
  (est, 2)         // est appears in the 2nd sentence as well
  (homines, 3)     // homines appears in the 3d sentence

如果你想在word、句子中使用Tuple<string, string>,只需在最后一个Select中将Tuple.Create(word, item.index + 1)改为Tuple.Create(word, item.text)

票数 7
EN

Stack Overflow用户

发布于 2019-06-03 19:50:07

你的意思是:

代码语言:javascript
复制
IEnumerable<(string, string)> query =
    from sentence in sentences
    from word in words
    where sentence.Contains(word)
    select (sentence, word);

这给了我们:

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56426412

复制
相关文章

相似问题

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