C# 将文档解析成句子
我有一个问题对专家来说应该足够简单,但对我来说却非常神秘:)我想将文本(预处理,除了常规标点符号外没有特殊字符)解析成句子,并执行两个类似的任务:C# 将文档解析成句子,c#,regex,linq,parsing,text,C#,Regex,Linq,Parsing,Text,我有一个问题对专家来说应该足够简单,但对我来说却非常神秘:)我想将文本(预处理,除了常规标点符号外没有特殊字符)解析成句子,并执行两个类似的任务: 对于每个句子,找出单词数(句子长度)。然后对于文档,找到平均句子长度。无需报告任何句子级输出。请注意,文档中包含大量专有名词,因此大写字母不一定表示句子的开头。但本文件中的句子通常以“,”,“!”或“?”结尾 对于每个句子,应用正则表达式模式。如果存在匹配项,则为句子指定一个值,例如1。对于整个文档,报告匹配项的数量。同样,只需要文档级输出 我想知道
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.
您可以根据句点(.)进行
拆分,这将为您提供一系列句子
string sentences[] = document.Split('.');
然后,您将根据“空格”对每个“句子数组”执行拆分
,以获得字数
是的,然后使用正则表达式进行匹配。因为您没有指定要匹配的内容,所以我无法添加更多内容。您可以根据句点(.)进行拆分,这将为您提供一系列句子
string sentences[] = document.Split('.');
然后,您将根据“空格”对每个“句子数组”执行拆分
,以获得字数
是的,然后使用正则表达式进行匹配。由于您没有指定要匹配的内容,因此我无法添加更多内容。您可以使用以下方法获得一个句子(取决于您对句子的定义):
还有一个词是:
[a-zA-Z]+
剩下的很简单-只需查看MSDN上正则表达式的文档。您可以使用以下方法获得一个句子(取决于您对句子的定义):
还有一个词是:
[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();
这应该起作用:
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();
但本文档中的句子通常以“.”结尾!,或“?”,啊,好的观点,然后你需要根据句号、问号或感叹号进行分割。虽然使用正则表达式可能会更快<代码>字符串句子[]=document.Split(新字符[]{'.','!','?'},StringSplitOptions.RemoveEmptyEntries)代码>。(removeMptyEntries
表示省略号。)这可能仍然比正则表达式快。您还可以使用分隔符来拆分句子:char[]分隔符={'!','.','?'};string[]words=text.Split(delimiterCars)代码>不令人讨厌,但是:字符串语句[]=document.Split(新字符[]{'.','!','?'},StringSplitOptions.RemoveEmptyEntries)
短于System.Text.RegularExpressions.Regex re=new System.Text.RegularExpressions.Regex(“(\a|[\!\?:])[^\!\?:]+”代码>“但本文档中的句子通常以“.”结尾!,或“?”,啊,好的观点,然后你需要根据句号、问号或感叹号进行分割。虽然使用正则表达式可能会更快<代码>字符串句子[]=document.Split(新字符[]{'.','!','?'},StringSplitOptions.RemoveEmptyEntries)代码>。(removeMptyEntries
表示省略号。)这可能仍然比正则表达式快。您还可以使用分隔符来拆分句子:char[]分隔符={'!','.','?'};string[]words=text.Split(delimiterCars)代码>不令人讨厌,但是:字符串语句[]=document.Split(新字符[]{'.','!','?'},StringSplitOptions.RemoveEmptyEntries)
短于System.Text.RegularExpressions.Regex re=new System.Text.RegularExpressions.Regex(“(\a|[\!\?:])[^\!\?:]+”代码>句子不会以逗号结尾。你的意思是句号吗?到目前为止,答案似乎没有说明十进制数字和缩写。一个句子不会以逗号结尾。你的意思是句号吗?到目前为止,答案似乎并不能解释十进制数字和缩写。用这种方法找单词是行不通的。你可能会用撇号、破折号或其他任何可能包含在一个单词中的东西计算错误。您可以将这些添加到角色集中并使用单词边界\b[^\s]+\b@Tony:这将匹配下划线、不间断空格和许多其他不需要的垃圾:)但这不是我的观点-他可以在那里放置任何字符,支持多种语言,允许数字,等等。“单词”的定义有点松散。对,我只是想表达,使用\b作为单词边界可能是区分单词开头和结尾的最佳方式。用这种方式查找单词是行不通的。你可能会用撇号、破折号或其他任何可能包含在一个单词中的东西计算错误。您可以将这些添加到角色集中并使用单词边界\b[^\s]+\b@Tony:这将匹配下划线、不间断空格和许多其他不需要的垃圾:)但这不是我的观点-他可以在那里放置任何字符,支持多种语言,允许数字,等等。“单词”的定义有点松散。对,我只是想表达,使用\b作为单词边界可能是区分单词开始和结束的最佳方式。