gpt4 book ai didi

c# - 根据单词列表搜索短语列表并计算出现次数

转载 作者:行者123 更新时间:2023-11-30 16:18:07 25 4
gpt4 key购买 nike

问题很简单……
鉴于:

-> 脏话列表,比如 List1。
-> 一个字符串列表(或短语)来搜索这些脏话,比如 List2

期望的输出:与至少一个脏话相匹配的短语数。

样本:
List1:“猫”、“狗”、“老鼠”、“可爱的动物”
List2:“一只猫很好”。 “一只狗不好”,“猫和狗很好”,“好动物”,“你好”,“你好老鼠”,“这很糟糕”

输出:5 个词组至少包含 1 个脏话。

我做了什么:

int sum = list1.Sum(s => list2.Count(t => t.Contains(s)));

搜索包含 5600 个短语和大约 4000 个字符串的脏话列表大约需要 38 秒。(四核,4 GB RAM)... WAYYYYYY 太慢了!

我四处寻找可能存在的解决方案或算法...找不到。

即使有人可以通过命名算法、显示代码片段或只是指指点点 (!!) 来为我指明正确的方向,那也太棒了!

最佳答案

这应该更有效,因为 Any 会尽快中断:

int contains = phrases.Count(p => foulWords.Any(fw => p.Contains(fw)));

你的方法也不是最优的,因为你的起点是 List1(foulWords) 所以你需要每个计数的总和,这是低效的。正确的结果必须介于 0(没有匹配的脏话)和 phrases.Count(所有短语都包含脏话)之间。所以起点应该是短语

Demo

Q: Could you also help me modify the above code to also give me INDEX of the phrase in the list?

是的:

var wordIndexes = phrases.Select((phrase, index) => new { phrase, index })
.Where(x => foulWords.Any(fw => x.phrase.Contains(fw)));

foreach (var wordIndex in wordIndexes)
Console.WriteLine("Word: {0} Index: {1}", wordIndex.phrase, wordIndex.index);

结果:

Word: A cat is good        Index: 0
Word: a dog is bad Index: 1
Word: cat and dog are good Index: 2
Word: Nice animal Index: 3
Word: Hello mouse Index: 5

关于c# - 根据单词列表搜索短语列表并计算出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16435245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com