首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将文档解析为句子

将文档解析为句子
EN

Stack Overflow用户
提问于 2011-06-02 19:21:12
回答 3查看 2K关注 0票数 0

我有一个问题,对专家来说应该很简单,但对我来说却是令人痛苦的神秘:)我想把文本(预处理后,除了常规标点符号之外没有特殊字符)解析成句子,并执行两项类似的任务:

  1. 对于每个句子,找出单词的数量(句子长度)。然后,对于文档,找出平均句子长度。没有必要报告任何句子级的输出。请注意,文档包含了相当数量的专有名词,因此大写字母并不表示句子的开头。但本文档中的句子通常以“、”、"!“或"?”结尾。
  2. 对每个句子应用regex模式。如果有匹配,给这个句子一个值,例如.1。对于整个文档,报告匹配的数量。同样,只需要文档级的输出。

我想知道是否有办法做到这一点,最好是在C#或VB中。任何帮助都将不胜感激。

======================

示例段落:

代码语言:javascript
复制
This is an example of a paragraph! It contains three sentences? And the average sentence has many words. 

示例模式:

代码语言:javascript
复制
"three"

输出:

代码语言:javascript
复制
number of sentences-3.
Average sentence length-6.
Number of matches-1.
EN

回答 3

Stack Overflow用户

发布于 2011-06-02 19:24:44

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

代码语言:javascript
复制
(\a|[\.!\?:])[^\.!\?:]+

还有一个词使用:

代码语言:javascript
复制
[a-zA-Z]+

其余的都很简单--只需查看MSDN上正则表达式的文档即可。

票数 2
EN

Stack Overflow用户

发布于 2011-06-02 19:44:29

这应该是可行的:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-06-02 19:23:30

您可以根据句点(.)执行Split。这会给你一系列的句子。

代码语言:javascript
复制
string sentences[] = document.Split('.');

然后,根据“空格”对每个“句子数组”执行一个Split,以获得单词数。

是的,然后使用正则表达式进行匹配。由于您没有指定要匹配的内容,所以我可以添加的其他内容不多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6219317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档