把文件解析成句子

本文关键字:句子 文件 | 更新日期: 2023-09-27 17:58:12

我有一个问题,对专家来说应该足够简单,但对我来说却非常神秘:)我想将文本(经过预处理,除了常规标点符号外没有特殊字符)解析成句子,并执行两项类似于的任务:

  1. 对于每个句子,找出单词的数量(句子长度)。然后,对于文档,求出平均句子长度。不需要报告任何句子级别的输出。请注意,文档中包含相当多的专有名词,因此大写字母不一定意味着句子的开头。但这份文件中的句子通常以"、"、"!"或"?"结尾。

  2. 对于每个句子,应用正则表达式模式。如果匹配,给句子一个值,例如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.

把文件解析成句子

您可以使用获得一个句子(取决于您对句子的定义)

('a|['.!'?:])[^'.!'?:]+

还有一个词使用:

[a-zA-Z]+

剩下的很简单——只需查看MSDN上的正则表达式文档即可。

这应该有效:

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();

你可以根据句点(.)做一个Split,它会给你一组句子。

string sentences[] = document.Split('.');

然后你会根据一个"空格"对每个"句子数组"做一个Split,以获得单词的数量。

是的,然后你可以使用正则表达式来进行匹配。由于您没有指定要匹配的内容,因此我无法添加太多其他内容。