项目有一个需求,需要对16万缅甸语新闻做词频统计。首先是分词工具的选择和使用,然后是词频统计。

分词:

工具有voyant-tools、myanmar-tokenizer以及我使用的es的icu_analyzer。
结果是voyant-tools基于java,看不懂怎么用,听闻和myanmar-tokenizer一样会把词分得很细。icu_analyzer可以分得粗,音标会消失。经过尝试,原来正确的分词是这样,音标不会消失:

"tokenizer":"icu_tokenizer"

经老师检查,用icu_tokenizer。由于es不能频繁访问,所以考虑直接用icu_tokenizer。pip install 失败。
只能去官网下载包,解压后放在site-packages。
打开控制台。

python setup.py build
python setup.py install

然后发现又要下载pyicu。用whl的方式下载。
whl

pip install xxx.whl

终于可以用了

from icu_tokenizer import Tokenizer
tokenizer = Tokenizer(lang='th')# text = "မရေရာမှုများကြားက CDM မြန်မာသံတမန"
text="အောင်;တရုတ်"
print(tokenizer.tokenize(text))

th是泰语,其实参数有没有都行。

词频统计:

原本想利用es进行词频统计

{"size":0,"aggs":{"messages" : {"terms" : {"size":1000"field" : "body",}}  }
}

然而只能显示前几个,要是太多则报太多分桶的错误。
查询可以对聚合结果分页(分桶)查看。

{"size":0,"aggs":{"messages" : {"terms" : {"field" : "body",},"aggs": {"myBucketSort": {"bucket_sort": {"from": 0,"size": 5,"gap_policy": "SKIP"}}}}  }
}

size表示一次显示5个桶,from等于pageNum*size。然而对于词频统计似乎在25个之后就没有数据了。没有用。
经过查询好像可以用hadoop的mapreduce做词频统计。算是有新思路。

后续

icu_tokenizer的分词质量很差,而icu_analyzer好像包括几个过程。

它是elasticsearch的插件,不可能频繁访问,所以即使在请求参数里配置也没用。要单独拿出来用于分词,只能用它的源码analysis-icu,源码的jar包管理基于gradle,导包的时候也是会报错,gradle的问题。
即使所有包下载好了,也不懂怎么使用analyzer得到分词结果。测试代码如下

更别说用这个上方的音节会消失,也不知道能不能调参数解决,以及怎么调参数,涉及看es源码那实在得不偿失。这个先放弃。留两篇博客分词1,分词2。
然后尝试voyant-tools。官网首先下载源码,找到这个github,导包的时候发现

<dependency><groupId>org.voyant-tools</groupId><artifactId>trombone</artifactId><version>5.2.0-SNAPSHOT</version>
</dependency>

这个在中央仓库已经没有了,然后又想到之前看到过一个trombone,就拿来用,按指示打包jar包,再手动导入项目中,看到可以用了。

但是jsp文件爆红。

可以看到这个servlet属于jakata包下,而项目里的servlet在javax下。调查发现在tomcat10以后就是这样。但是项目里为什么又是javax呢,先不管。
用tomcat7跑一下,有页面但是500错误,原因是找不到编译的java文件。这个很奇怪。
我只能下载tomcat11来跑,这次找到文件了,但是报错说找不到javax.servlet.xx的类,和我之前想的一样。
我试了很多方法,在pom.xml中导入jakata.servlet相应的jar包,这次jsp没有红,但是启动服务器依然找不到,因为它的项目是基于javax的,jsp文件里却是jakata。我兜兜转转试了很多方法,这个问题依然没有解决。从上午搞到晚上,别说睡午觉了,吃饭也只是吃了两个包。
期间各种问题,像build乱码,tomcat控制台和日志乱码,任务管理器结束任务白屏等等,还有注意maven对应java版本,tomcat对应java版本
后面我想起它之前还有个仓库,是一个旧版本已被归档的仓库,我就想能不能降低版本呢。用这个依然要自己生成和导入trombone,然后要用tomcat8,太高版本是不行的,反而jsp没有爆红了,所用的servlet也是javax的,有点希望,但是启动tomcat已经报错了。大意如此 org.apache.catalina.LifecycleException:无法启动组件[StandardEngine [Catalina]
其实更应该关注后面的错误,它说找不到trombone下有一个Storage类,我看了下没问题,想应该是通用的错误,不关这个包事,解决
晚上七点多,终于能在本地看到这个界面了
本来我早就不想干了,只是一种执念。但是上传文件后报错了,这真是源码的问题了,我不想费时费力动源码。

后面问师兄他一下载就能用了,才知道是voyant server
下载之后解压运行jar文件就可以?界面报错了,无论用java18还是java8都是,非常让我失望。不过我已经尽力了,真要用这个分词的话直接上传到官网让它帮我做就行。
然后老师又说voyant的分词质量也是不行。
我又用了老师们新发的分词器,seanlp。这个就很友善,只是百度云盘太慢了,不仅有六种模式的分词,还有词性标注。也不知道最后选择哪个分词器。
小小缅甸语分词搞那么久,费了那么大劲,前后试了5个分词器,真是没想到,赶快结束吧。也有我的问题,原来icu_analyzer和icu_tokenizer完全不同。

从这篇文章得知python的ployglot包和es的icu原理一样,就尝试了一下。先安装了这个包。在输入缅甸语进行测试时出现错误。解决后又出现错误。要安装三个包,前两个包都在这里下载吧。然后终于可以用了。结果和icu_tokenizer一样,没什么用。
比现阶段分词效果好的只有icu_analyzer了。两个问题待解决。一是上面的符号消失,二是es不能频繁访问。
关于问题一我看了一些可以自定义分词器,其中有filter等等。1、2、3,ascii_folding的过滤很像,然而试了一下 “très” "tres"是可以,但不能解决我问题。我怀疑是icu这个过滤器。

这就要涉及源码了。org.apache.lucene.analysis.Analyzer
如果肯钻研源码的话,应该是可以用icu_analyzer的,可是得不偿失。希望得到指教,感激。

再后续

在eval(分词结果)的时候出现ValueError: source code string cannot contain null bytes,困扰许久,应该是字面意思出现空字符了,最后用replace(“\0”,“”)解决。

然后list类型转字符串的时候分隔是", “这样,所以split(” ")的时候会报错,replace一下就好了

东南亚语种分词和词频统计相关推荐

  1. python分词和词频统计

    Python大数据:jieba分词,词频统计  黑冰中国 关注 0.1 2018.03.21 11:39* 字数 1717 阅读 7553评论 6喜欢 45赞赏 1 实验目的 学习如何读取一个文件 学 ...

  2. python字频统计软件_python结巴分词以及词频统计实例

    python结巴分词以及词频统计实例 发布时间:2018-03-20 14:52, 浏览次数:773 , 标签: python # coding=utf-8 ''' Created on 2018年3 ...

  3. python词频统计完整步骤_Python中文文本分词、词频统计、词云绘制

    本文主要从中文文本分词.词频统计.词云绘制方面介绍Python中文文本分词的使用.会使用到的中文文本处理包包括:wordcloud,jieba,re(正则表达式),collections. 1 准备工 ...

  4. python软件和rost软件哪个更好_ROST-CM软件分词和词频统计用法体验

    ROST作为一款优秀的内容挖掘工具,在自然语言处理上提供一系列能够快速上手使用的功能,其中"分词"功能也是广为使用的.我们在对文本进行分词处理的过程中,由于词库是固定的,所以不管是 ...

  5. Python中文分词及词频统计

    Python中文分词及词频统计 中文分词 中文分词(Chinese Word Segmentation),将中文语句切割成单独的词组.英文使用空格来分开每个单词的,而中文单独一个汉字跟词有时候完全不是 ...

  6. Python大数据:jieba分词,词频统计

    实验目的 学习如何读取一个文件 学习如何使用DataFrame 学习jieba中文分词组件及停用词处理原理 了解Jupyter Notebook 概念 中文分词 在自然语言处理过程中,为了能更好地处理 ...

  7. python统计词频_Python中文分词及词频统计

    中文分词 中文分词(Chinese Word Segmentation),将中文语句切割成单独的词组.英文使用空格来分开每个单词的,而中文单独一个汉字跟词有时候完全不是同个含义,因此,中文分词相比英文 ...

  8. python 小说词频统计_Python中文分词及词频统计

    中文分词 中文分词(Chinese Word Segmentation),将中文语句切割成单独的词组.英文使用空格来分开每个单词的,而中文单独一个汉字跟词有时候完全不是同个含义,因此,中文分词相比英文 ...

  9. python实现中文分词和词频统计

    python2.7中实现中文分词,是引入了jieba中文分词库.再进行简单的词频统计. import sys reload(sys) sys.setdefaultencoding('utf-8') i ...

最新文章

  1. kmeans算法原理以及实践操作
  2. 将军令:数据安全平台建设实践 1
  3. 打开excel显示php拓展名,新建xls文件提示扩展名不一致
  4. 自学编程的12个网站
  5. 考研复试数据库知识总结
  6. java基础之线程参考尚硅谷视频
  7. cfa英语不好的怎么学_考CFA,英语太差怎么办?
  8. 命令行窗口-隐藏黑窗口
  9. 新一配:文言文也能编程?该项目在GitHub摘得5500星
  10. Android O 开机动画铃声
  11. ATECC508A芯片开发笔记(九):加密读写508芯片数据的流程及相应设置
  12. html5 手机站点,HTML5移动端手机网站基本模板 HTML5基本结构
  13. The bean ‘xxx‘ could not be injected as a ‘xxx‘ because it is a JDK dynamic proxy that implements:
  14. 虚拟存储器 与虚拟内存详解
  15. com.android.sr已停止,DCS-SDK(java)运行于Android4.4.2版本退出时提示程序停止运行
  16. matlab的无穷大怎样表示_matlab中从一到无穷大怎么表示
  17. C4D中无法连接对象+删除?
  18. Android自动获取短信验证码
  19. vue中使用Cesium
  20. 你觉得世界的尽头是什么

热门文章

  1. B2B存活尚不过半 电子商务谁主沉浮
  2. 一种MQTT客户端消息队列的设计
  3. 2901-View-Gallery
  4. 中间号的使用方式介绍
  5. 信用卡通过消费日期计算还款日
  6. 大数据分析,足球运动的“料理师”
  7. python自定义加减乘除函数实现加减乘除_Python实现高精度加减乘除运算
  8. 机器学习——模型评估、选择与验证
  9. 解决kde 桌面环境,触摸板手指轻触无法使用的问题
  10. 【AngularJs学习笔记三】Grunt任务管理器