【算法相关】高频词汇统计C#简易版

其实类似于“出现次数统计”的问题,在很多地方都有遇到过,例如,统计一组数字中,每个数字出现的次数。这类统计大多会朝着一个方向发展,那就是大数据。此篇博客只是初级篇,本人在大数据方面一无所知,不做过多讲解。

C#版高频词汇主要需要去面对的事:

  • 将主流格式文档导入至词汇分析系统中,包括.doc, .docx, .pdf , .txt等。
  • 运用正则表达式,将文档中无关内容做过滤,例如文档中出现中文或者一些特殊符号等,这些都无需参与统计的。
  • 将每个单词分离出来,这里其实是个技术难点(很多单词存在时态上的差异,如:go,went,gone。也有先单词存在单复数上的拼写差异。同时也有些单词存在缩写的形式,例如 you’re, don’t等等)
  • 紧接着是要选择一个非常高效的算法,对一份文档的分析可能是比较简单的,可能耗时只有零点几秒,但如果是几千份文档呢?

【算法相关】高频词汇统计C#简易版_第1张图片

以上列举的问题有以下解决办法:

  • 关于导入不同格式文档的做法还是很简单的,这里就不详细介绍了。
  • 过滤无关字符,使用正则表达式,如:Regex reg = new Regex(@"(?i)\b(?!['-])[a-z'-]+(?<!['-])\b");//去除标点,中文
  • 而对于不同时态问题的解决办法,最直接的是将所有特殊变化类型的列举出来,毕竟这些特殊情况是有限的,不过单复数可能有存在一些问题,而同时还有个问题存在,那就是大小写的问题,如:You 和 you 是同一个单词,如果全部转小写,可能会存在潜在问题,例如有的单词大写是人名,而小写不是表示人名。
  • 而算法方面,我的算法不够优,也希望大神们讲讲思路告诉我,这里有注意到别人的一篇博客,在此引用下别人的做法:
    http://blog.csdn.net/calmreason/article/details/7772132

继续完善的方面有以下几点:

  • 算法方面更高效
  • 利用网络爬虫直接抓取网页内容,统计大量网页上出现的高频词汇,现在做的都是统计针对本地文档,这太狭隘了。

你可能感兴趣的:(算法,正则表达式)