py-kenlm-model

python | 高效使用统计语言模型kenlm:新词发现、分词、智能纠错等

之前看到苏神【重新写了之前的新词发现算法:更快更好的新词发现】中提到了kenlm,之前也自己玩过,没在意,现在遇到一些大规模的文本问题,模块确实好用,前几天还遇到几个差点“弃疗”的坑,解决了之后,就想,不把kenlm搞明白,对不起我浪费的两天。。

额外需要加载的库:

kenlm

pypinyin

pycorrector

笔者的代码可见github,只是粗略整理,欢迎大家一起改: mattzheng/py-kenlm-model

相关新词发现,fork了苏神的,进行了微调:

博客链接:

1 kenlm安装

在这里面编译:kpu/kenlm,下载库之后编译:

mkdir -p build

cd build

cmake ..

make -j 4

一般编译完,很多有用的文件都存在build/bin之中,这个后面会用到: python库的安装方式:

pip install https://github.com/kpu/kenlm/archive/master.zip

简单使用:

import kenlm

model = kenlm.Model('lm/test.arpa')

print(model.score('this is a sentence .', bos = True, eos = True))

坑点来了,笔者之前装在docker之中的,之前一不小心重启docker,kenlm就不灵了。。 当时并不知道该如何重新编译,就重新:cmake .. + make -j 4,但是这样出来,运行会报很多依赖没装:

libboost_program_options.so.1.54.0: cannot open shared object file: No such file or directory

笔者还假了嘛嘎的去ubuntu上拉下来装了,又报其他依赖错。。

(此处省略N多次,无效尝试。。。)

如果出现:

-- Could NOT find BZip2 (missing: BZIP2_LIBRARIES BZIP2_INCLUDE_DIR)

-- Could NOT find LibLZMA (missing: LIBLZMA_INCLUDE_DIR LIBLZMA_LIBRARY LIBLZMA_HAS_AUTO_DECODER LIBLZMA_HAS_EASY_ENCODER LIBLZMA_HAS_LZMA_PRESET)

需安装:

sudo apt install libbz2-dev

sudo apt install liblzma-dev

之后实验发现,把build文件夹删了,重新来一遍cmake .. + make -j 4即可。

2 kenlm统计语言模型使用

2.1 kenlm的训练 lmplz

2.1.1 两种训练方式

训练是根据build/bin/lmplz来进行,一般来说有两种方式:

(1)管道的方式传递

数据print的方式,苏神之前的博客【【中文分词系列】 5. 基于语言模型的无监督分词】中有提到:

python p.py|./kenlm/bin/lmplz -o 4 > weixin.arpa

p.py为:

import pymongo

db = pymongo.MongoClient().weixin.text_articles

for text in db.find(no_cursor_timeout=True).limit(500000):

print ' '.join(text['text']).encode('utf-8')

(2)预先生成语料文本

直接命令行,数据保存

bin/lmplz -o 3 --verbose_header --text ../text-18-03/text_18-03-AU.txt --arpa MyModel/log.arpa

其中参数的大致意义:

-o n:最高采用n-gram语法

-verbose_header:在生成的文件头位置加上统计信息

--text text_file:指定存放预料的txt文件

--arpa:指定输出的arpa文件

-S [ --memory ] arg (=80%) Sorting memory内存预占用量

--skip_symbols : Treat , , and as whitespace instead of throwing an exception

预先语料可以不加开头、结尾符号,其中, 需要特别介绍三个特殊字符。 、和和结对使用,模型在计算概率时对每句话都进行了处理,将该对标记加在一句话的起始和结尾。 这样就把开头和结尾的位置信息也考虑进来。 如“我 喜欢 吃 苹果” --> " 我 喜欢 吃 苹果 " 表示unknown的词语,对于oov的单词可以用它的值进行替换。

可参考: 不带开头结尾:

W h o o 后 拱 辰 享 水 水 妍 护 肤 套 装 整 套 质 地 都 比 较 清 爽

滋 润

侧 重 保 湿

适 合 各 种 肤 质

调 节 肌 肤 水 平 衡

它 还 具 有 修 复 功 效

提 亮 肤 色 我 是 油 性 肤 质 用 起 来 也 一 点 也 不 觉 得 油 腻

味 道 淡 淡 的 还 很 好 闻

也 很 好 吸 收

质 地 清 爽

带开头结尾的:

3 乙 方 应 依 据 有 关 法 律 规 定

对 甲 方 为 订 立 和 履 行 本 合 同 向 乙 方 提 供 的 有 关 非 公 开 信 息 保 密

但 下 列 情 形 除 外

1 贷 款 人 有 权 依 据 有 关 法 律 法 规 或 其 他 规 范 性 文 件 的 规 定 或 金 融 监 管 机 构 的 要 求

2.1.2 生成文件arpa的解释

python函数封装计算n_python | 高效使用统计语言模型kenlm:新词发现、分词、智能纠错等...相关推荐

  1. python函数封装计算n运算_在Python里面怎么可以运算出999999999**999999999,求思路?...

    >>> 999999999 * math.log(999999999, 2) / 8 / 1024 ** 3 3.480509950621777 所以这个数字本身就差不多需要3.5G ...

  2. Python函数封装:利用正则表达式compile、findall对多组关键词进行模糊查询并返回统计个数,findall截取两个指定符号之间的内容

    Python函数封装:利用正则表达式compile.findall对多组关键词进行模糊查询并返回统计个数,findall截取两个指定符号之间的内容 目录 利用正则表达式compile.findall对 ...

  3. python函数封装图解_Python面向对象之封装

    前文导读 知识框架: 1.什么是封装 2.封装的优点与原则 3.私有变量和私有方法 4.封装的更多说明 什么是封装 封装是面向对象编程的一大特点,面向对象编程的第一步将属性和方法封装到一个抽象类中,外 ...

  4. python函数封装总结_python 笔记 之 函数封装成类

    2019独角兽企业重金招聘Python工程师标准>>> # 函数封装成一个类 # 将不同功能封装成不同函数 ''' 0!+1!+2!+3!...+n! 1+1+1+2+6+...+n ...

  5. 尝试进行函数封装--计算BMI值

    尝试函数封装: def func_name(height, weight): 一个人的身高(m)和体重(kg), height=0.17, weight=65,根据BMI公式(体重除以身高的平方)计算 ...

  6. python | 高效统计语言模型kenlm:新词发现、分词、智能纠错

    之前看到苏神[重新写了之前的新词发现算法:更快更好的新词发现]中提到了kenlm,之前也自己玩过,没在意,现在遇到一些大规模的文本问题,模块确实好用,前几天还遇到几个差点"弃疗"的 ...

  7. python函数封装的好处_C++用类封装函数有什么好处么?

    myListSort这种用法称为"函数对象"或"仿函数".从名称可以看出来,myListSort是一个类(或结构),而非函数,但是它的使用方法又颇似函数,即可以 ...

  8. Python函数之计算规则图形的面积

    来个直接的吧,看代码; #coding=utf-8 from __future__ import unicode_literals import sys reload(sys) sys.setdefa ...

  9. python构建一个计算列表中位数的函数_python学习之数据科学库

    numpy创建数组 #导入numppy库, 对numpy重命名为np. import numpy as np #1). 创建数组: a, b, c创建的数组相同, 任选一种; #方法一: 直接将数组/ ...

最新文章

  1. 原来deepin部署环境还是那么简单(只不过要用root权限)
  2. [NOI2012]美食节
  3. Linux装c编译器gcc,c编译器进阶之路,linux下的gcc c编译器使用教程
  4. 别再瞎搞数仓了!BAT内部大神:数据仓库不是谁都可以建的
  5. NetBeans 时事通讯(刊号 # 74 - Sep 30, 2009)
  6. 拼多多市值创新高,成中国第四大互联网公司!
  7. 手机上使用油猴插件 Tampermonkey
  8. 神是什么?神即道 道法自然 如来 ---《天道》王志文饰丁元英 左小青饰芮小丹
  9. 程炳皓的金矿:开心网“记账”组件
  10. 《东周列国志》第六十五回 弑齐光崔庆专权 纳卫衎宁喜擅政
  11. win10系统更新后打开chrome浏览器几秒后自动闪退
  12. 影响力(罗伯特·西奥迪尼)读书笔记思维导图
  13. Linux XAMP is currently only availably as 32 bit application.
  14. 视频教程-react电影院在线选座功能-ReactJS
  15. 计算机打印状态错误,打印机出现错误状态是怎么回事,教您解决办法
  16. 关于数据库加密你不能不知道的秘密
  17. Java web video 视频开发
  18. ICESat2数据hd5文件的预处理
  19. 用Windows Media Service 9 实现VOD广播和点播系统(上)
  20. 国债逆回购和债券型基金基础

热门文章

  1. render函数介绍,以及 render: h =gt; h(App)
  2. config kubectl_kubectl config 命令使用说明
  3. 郑州旅游职业学院计算机宿舍,郑州旅游职业学院宿舍条件,宿舍几人间环境好不好(图片)...
  4. 计算机毕业设计之java+ssm医院资产管理系统
  5. ibatis里面if else 用法
  6. 五种最短路径算法的总结(待更新)
  7. 为虚拟机创建远程用户
  8. 利用VC实现图像的特殊显示效果
  9. Mybatis核心源码赏析(二)
  10. evaluate函数