我有一个问题应该对专家来说应该很简单,但对我来说却是非常神秘:)我想将一个文本(预处理,除了常规标点符号之外没有特殊字符)解析成句子并执行两项任务类似于:
对于每个句子,找到单词的数量(句子长度)。然后对于文档,找到平均句子长度。没有必要报告任何句子级别的输出。请注意,该文档包含相当数量的专有名词,因此大写字母不一定意味着句子的开头。但是本文档中的句子通常以“,”,“!”或“?”结尾。
对于每个句子,应用正则表达式模式。如果匹配,则给句子赋值,例如1。对于整个文档,报告匹配数。同样,只需要文档级输出。
我想知道是否有办法做到这一点,最好是在C#或VB中。任何帮助将不胜感激。
======================
示例段落:
This is an example of a paragraph! It contains three sentences? And the average sentence has many words.
示例模式:
"three"
输出:
number of sentences-3.
Average sentence length-6.
Number of matches-1.
答案 0 :(得分:2)
你可以使用:
得到一个句子(取决于你对句子的定义)(\a|[\.!\?:])[^\.!\?:]+
一句话使用:
[a-zA-Z]+
其余的很简单 - 只需查看MSDN上正则表达式的文档。
答案 1 :(得分:2)
这应该有效:
string example =
"This is an example of a paragraph! It contains three sentences? And the average sentence has many words.";
var splitExample = example.Split(new[] {'.', '!', '?'}, StringSplitOptions.RemoveEmptyEntries);
var matchExpression = new Regex("three");
double avgLength = splitExample.Average(x => x.Split(new []{' '}, StringSplitOptions.RemoveEmptyEntries).Length);
int sentences = splitExample.Length;
int matches = splitExample.Where(x => matchExpression.IsMatch(x)).Count();
答案 2 :(得分:1)
您可以根据句点(。)进行Split
,这会给您一系列句子。
string sentences[] = document.Split('.');
然后你会根据“空格”对每个“句子数组”做一个Split
来得到单词数。
是的,然后你会使用正则表达式进行匹配。由于你没有指定你想要匹配的内容,我可以添加其他内容。