【发布时间】:2019-03-13 08:55:49
【问题描述】:
遇到了一个非常大的问题。我的任务是将输入文本拆分为句子,然后将句子拆分为单词。代码来了:
using System.Collections.Generic;
using System.Linq;
namespace TextAnalysis
{
static class SentencesParserTask
{
public static List<List<string>> ParseSentences(string text)
{
var sentencesList = new List<List<string>>();
var splittedText = text.Split('.', '!', '?', ';', ':', '(', ')');
List<string>[] mas = new List<string>[splittedText.Length];
for (int i = 0; i < splittedText.Length; i++)
{
mas[i] = new List<string>();
}
for (int j = 0; j < splittedText.Length; j++)
{
mas[j]= GetWordsOutOfTheSentence(splittedText);
bool isEmpty = !(mas[j]).Any();
if(!isEmpty)
sentencesList.Add(mas[j]);
}
return sentencesList;
}
private static List<string> GetWordsOutOfTheSentence(string[] splittedText)
{
var wordList = new List<string>();
foreach (var sentence in splittedText)
{
var wordsArray = sentence.Split('^', '#', '$', '-', '+', '1', '=', ' ', '\t', '\n', '\r',',');
for (int i = 0; i < wordsArray.Length; i++)
{
if (wordsArray[i] != string.Empty)
{
var fineWord = wordsArray[i];
wordList.Add(fineWord.ToLower());
}
}
}
return wordList;
}
}
}
主要问题在于测试1)
失败:TextAnalysis.SentencesParser_Tests.CorrectlyParse_SentenceDelimiters
输入文本:[a.b!c?d:e;f(g)h;i]
第 0 句是错误的
预期是> 有 1 个元素,实际是 > 有 9 个元素
索引 [1] 处的值不同
额外:
我的代码只是继续在列表中添加新单词,然后在主列表中添加该列表。我该怎么办?
【问题讨论】:
-
你认为什么是句子,什么是词?
-
您也可以在拆分后调用 .ToList(来自 System.Linq)
-
你调用
GetWordsOutOfTheSentence(splittedText),意思是你使用整个文本并且使用结果,就好像它只是一个句子一样。你的意思是使用splittedText[ j ]? -
能否也分享一下测试方法?