Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将文档解析成句子_C#_Regex_Linq_Parsing_Text - Fatal编程技术网

C# 将文档解析成句子

C# 将文档解析成句子,c#,regex,linq,parsing,text,C#,Regex,Linq,Parsing,Text,我有一个问题对专家来说应该足够简单,但对我来说却非常神秘:)我想将文本(预处理,除了常规标点符号外没有特殊字符)解析成句子,并执行两个类似的任务: 对于每个句子,找出单词数(句子长度)。然后对于文档,找到平均句子长度。无需报告任何句子级输出。请注意,文档中包含大量专有名词,因此大写字母不一定表示句子的开头。但本文件中的句子通常以“,”,“!”或“?”结尾 对于每个句子,应用正则表达式模式。如果存在匹配项,则为句子指定一个值,例如1。对于整个文档,报告匹配项的数量。同样,只需要文档级输出 我想知道

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


  • 对于每个句子,找出单词数(句子长度)。然后对于文档,找到平均句子长度。无需报告任何句子级输出。请注意,文档中包含大量专有名词,因此大写字母不一定表示句子的开头。但本文件中的句子通常以“,”,“!”或“?”结尾

  • 对于每个句子,应用正则表达式模式。如果存在匹配项,则为句子指定一个值,例如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.
    

    您可以根据句点(.)进行
    拆分,这将为您提供一系列句子

    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作为单词边界可能是区分单词开始和结束的最佳方式。