如何返回包含单词的句子的编号



我一直在努力改进编程(特别是c#(,但一直坚持这个项目。

我正在尝试创建一个windows表单程序,用户将一个段落输入到文本框中,然后该程序返回输入的段落中的所有唯一单词以及唯一单词的计数。然后我需要列出哪些句子包含这些独特的单词。

我相信我已经记下了前两部分(列出了独特的单词及其计数(,然而,我正在努力思考如何完成最后一部分。我在下面列出了我的代码。任何建议都很好。谢谢


namespace MrSteamyRayVaughn
{
public partial class MrSteamyRayVaughn : Form
{
public string[] paragraphWords { get; set; }
public string[] paragraphSentences { get; set; }
public MrSteamyRayVaughn()
{
InitializeComponent();
}
private void btnRun_Click(object sender, EventArgs e)
{
ParagraphSplitter();
UniqueWordCounter();
}
private void ParagraphSplitter()
{
string inputParagraph = richTextBox1.Text;
paragraphWords = inputParagraph.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
paragraphSentences = inputParagraph.Split(new[] { "." }, StringSplitOptions.RemoveEmptyEntries);
}
private void UniqueWordCounter()
{
var uniqueWords = paragraphWords
.OrderBy(w => w)
.GroupBy(w => w, StringComparer.InvariantCultureIgnoreCase)
.Select(grp => new
{
Word = grp.Key,
Count = grp.Count()
}
);
foreach (var u in uniqueWords)
{
richTextBox1.AppendText($"{Environment.NewLine}Word {u.Word}: Count {u.Count}");
}
}
}
}

您可以使用Where子句筛选出句子中包含uniqueWords:中项目的Any的句子

List<string> sentencesThatContainAUniqueWord = paragraphSentences
.Where(sentence => uniqueWords.Any(sentence.Contains))
.ToList();

或者,如果您想进行不区分大小写的比较,可以使用IndexOf方法,该方法返回第一个匹配的索引(如果未找到匹配,则返回-1(:

List<string> sentencesThatContainAUniqueWord = sentences
.Where(sentence => words.Any(word =>
sentence.IndexOf(word, StringComparison.OrdinalIgnoreCase) > -1))
.ToList();

我真的不确定你在尝试什么,但如果我理解了,我会选择不同的方法。

计算唯一单词的最简单、最明显的方法是将每个作品添加到列表中(如果它们还没有包括在内(,然后计算列表中的元素。

是的,它不那么花哨,但它会起作用,如果有人追上你,你会立刻明白你想做什么。

我在手机上对此做出了回应,因此对任何格式错误提前表示歉意。

我认为如果你只说

Dictionary<string,string> uWordSentenceDictionary = new Dictionary<string,string>();
foreach (string sentence in paragraphSentences) {
string[] sentenceWords = sentence.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries);
List<string> matches = sentenceWords.Intersect(uniqueWords).ToList();
If(matches.Any()) { 
foreach(string match in matches){
uWordSentenceDictionary.Add(match,    sentence);
} 
}
}
uWordSentenceDictionary.ForEach( x => {
Console.Writeline($"Unique word: {x.Key}, Sentence: {x.Value}");
});

我想这会让你很好地把它分开。我看到其他人使用的包含也会解决你的问题。我提供这是一种替代的、分解的方法。

最新更新