wordmaker 词语生成工具

程序名称:wordmaker

授权协议: GPL

操作系统: 跨平台

开发语言: C/C++

wordmaker 介绍

wordmaker 词语生成工具

通过词语组成的规律,自动从大文本当中学习得到文本当中的词语,而不再需要其它额外的信息。

很多分词库等都需要字典库,特别在一些专业的领域,需要得到很多的专业相关词语。而人工标注字典需要花很大的时间,所以希望有一个工具能够自动从文本中训练得到词语。分析某类人的用词特点,也可以有所应用。

代码实现

最初尝试实现了一个简单版本,但基于单线程,运行速度慢,并且还消耗巨大的内存。最近尝试接触c++
11,并使用了类似map/reduce思想,所以决定拿这个项目练练手,也希望能有人多交流。思想如下:

  • 基于节约内存的 Trie树结构 (Double Array Trie & MARISA)
  • 用多个线程独立计算各个文本块的词的信息,再按词的顺序分段合并,再计算各个段的字可能组成词的概率,左右熵,得到词语输出。 因为都分成独立的块处理,所以使用多线程非常方便。这种思想应该可以应用在大部分的文本处理工作中,若有更好的办法欢迎交流~
  • src/wordmaker.cpp 将在内存当中完成所有计算,并只依赖于cedar.h文件。能够很快处理20M左右的文本。
  • src/hugemaker.cpp 为了节约内存,在计算、合并过程中将保存部分中间文件。可以处理更大的文本(50M+)。marisa:Trie支持mmap将trie文件mmap到内存当中,经过修改完全可以处理更巨大的文本(当时用的时间也会更久)。
  • 默认启用4个线程,可以修改代码的宏,也可以自己加shell命令控制。
  • 为了代码的简单,只支持gbk编码。(没太多检查,其它编码格式的输入将可能产生段错误,欢迎帮优化)
  • 在linux与cygwin下编码成功,visual studio下应该也没问题吧。
  • 因工作关系用C比C时间多得多,希望使用代码的人看到代码有任何不符合现在c观点的作法及时指出,以做交流!

编译与使用

mkdir build

cd build

cmake28 ..

make

./bin/wordmaker input.txt output.txt 或者

./bin/hugemaker input.txt output.txt

linux下可以使用:

iconv -f “gbk” -t “utf-8//IGNORE” < infile > outfile

进行编码转换。windows下当然可以使用notepad++了,转换成ANSI。

测试语料

sogou的新闻语料,把各个文本合成在一起总共50M:http://pan.baidu.com/s/1mgoIPxY
里面还有莫言的文集当做输入语料,方法大家测试代码。

这里是我运行的表现结果

TODO

  • 算法优化:结果里偶尔出现 “鼓舞了”、“默认了”、“鲜红的”等错误词,虽然算法里已经较好的处理了这种情况,但感觉应该有更好的办法,比如:给类似“的”、“了”、“在”等出现频率特别高的字更低的组词权重,而提高其它一些情况的词的权重,可能输出结果会更好。

  • 找到更多的语料,结合本工具,并实现一些办法,从这些语料当中分析得到更多的有趣信息。比如说网络流行词,某行业的专用词等。

wordmaker 官网

https://github.com/jannson/wordmaker

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Pacman 是一个软件包管理器, 作为 ArchLinux 发行版的一部分.
Smb4K 是KDE下的网络共享浏览器 更多屏幕截图请看:http://developer.berlios.de/screenshots/?group_id=769
Wine (“Wine Is Not an Emulator” 的首字母缩写)是一个能够在多种 POSIX-compliant 操作系统(诸如
虚拟桌面软件,可管理最多9个虚拟桌面,你可以用热键进行桌面切换
UNetbootin (Universal Netboot Installer)为一种跨平台工具软件,可以用来建立Live USB 系统,也可以加载各种系统工具,或安装各种Linux操作系统(Linux套件)和其他操作系统,不需使用安装光碟(自 动透过网络下
Cobbler 可以用来快速建立 Linux 网络安装环境,它已将 Linux 网络安装的技术门槛,从大专以上文化水平,成功降低到初中以下,连补鞋匠都能学会。
Wubi是用于在Windows操作系统中安装Ubuntu的工具软件,Wubi中的W代表Windows Lubi和Wubi是兄弟项目,目的都是为了方便用户安装Ubuntu(也支持其他的Linux发行版,如Fedora),Lubi和Wubi两者工作的平台不同,但都具
KCalendar 允许被嵌入到你的 Linux 桌面,并支持显示包括农历日期、24 节气、农历节日、农历生日、阳历生日、阳历节日、阳历纪念日、周节日等在内的各种内容,尤其适合咱中文用户使用。
IPodWizard 让你可以定制你的 iPod 上的不同的图标,文本串和字体.该软件不仅可以直接地连接到你的 iPod
QEMU 是一套由Fabrice Bellard所编写的模拟处理器的自由软件。它与Bochs,PearPC近似,但其具有某些后两者所不具备的特性,如高速度及跨平台的特性。经由kqemu这个开源的加速器,QEMU能模拟至接近真实电脑的速度。
Launchy 是一款免费开源的协助您摒弃 Windows “运行”的 Dock 式替代工具,既方便又实用,自带多款皮肤,作为美化工具也未尝不可。Launchy
Apache Toolbox 是一个可以大大提高linux下apache(一种web服务器) 的安装配置效率的工具软件。Apache
AutoIt 目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows
每当你安装完一个新的系统,打完繁多的SP和Hotfix以后执行一下xpy是一个非常省事的主意:)xpy这个小工 具只有73K大小,
syslinux是一个轻量级的启动装载器,只用Windows的人可能不明白是什么东西,如果玩过Linux,一定知道lilo和grub,是的,所谓轻量级我想就是跟grub们相比而言的,尤其是grub2。
GRUB是一个多重启动管理器。GRUB是GRand Unified Bootloader的缩写,它可以在多个操作系统共存时选择引导哪个系统。它可以引导几乎所有的Unix,Linux,Windows操作系统。它可以
bash 是一个为GNU项目编写的Unix shell。它的名字是一系列缩写: B ourne- A gain SH ell
AppleJack 是一个对使用者很友好的故障诊断工具,适用于 Mac OS X 平台。
Gujin 是一个 PC 的启动加载器,可分析你的分区和文件系统。可查找可用的 Linux
Ubuntu Tweak 是一款专门为Ubuntu准备的配置、调整工具。不论您是新手还是老手,都将从这个工具中获取帮助。