python函数封装计算n_python | 高效使用统计语言模型kenlm:新词发现、分词、智能纠错等...
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:新词发现、分词、智能纠错等...相关推荐
- python函数封装计算n运算_在Python里面怎么可以运算出999999999**999999999,求思路?...
>>> 999999999 * math.log(999999999, 2) / 8 / 1024 ** 3 3.480509950621777 所以这个数字本身就差不多需要3.5G ...
- Python函数封装:利用正则表达式compile、findall对多组关键词进行模糊查询并返回统计个数,findall截取两个指定符号之间的内容
Python函数封装:利用正则表达式compile.findall对多组关键词进行模糊查询并返回统计个数,findall截取两个指定符号之间的内容 目录 利用正则表达式compile.findall对 ...
- python函数封装图解_Python面向对象之封装
前文导读 知识框架: 1.什么是封装 2.封装的优点与原则 3.私有变量和私有方法 4.封装的更多说明 什么是封装 封装是面向对象编程的一大特点,面向对象编程的第一步将属性和方法封装到一个抽象类中,外 ...
- python函数封装总结_python 笔记 之 函数封装成类
2019独角兽企业重金招聘Python工程师标准>>> # 函数封装成一个类 # 将不同功能封装成不同函数 ''' 0!+1!+2!+3!...+n! 1+1+1+2+6+...+n ...
- 尝试进行函数封装--计算BMI值
尝试函数封装: def func_name(height, weight): 一个人的身高(m)和体重(kg), height=0.17, weight=65,根据BMI公式(体重除以身高的平方)计算 ...
- python | 高效统计语言模型kenlm:新词发现、分词、智能纠错
之前看到苏神[重新写了之前的新词发现算法:更快更好的新词发现]中提到了kenlm,之前也自己玩过,没在意,现在遇到一些大规模的文本问题,模块确实好用,前几天还遇到几个差点"弃疗"的 ...
- python函数封装的好处_C++用类封装函数有什么好处么?
myListSort这种用法称为"函数对象"或"仿函数".从名称可以看出来,myListSort是一个类(或结构),而非函数,但是它的使用方法又颇似函数,即可以 ...
- Python函数之计算规则图形的面积
来个直接的吧,看代码; #coding=utf-8 from __future__ import unicode_literals import sys reload(sys) sys.setdefa ...
- python构建一个计算列表中位数的函数_python学习之数据科学库
numpy创建数组 #导入numppy库, 对numpy重命名为np. import numpy as np #1). 创建数组: a, b, c创建的数组相同, 任选一种; #方法一: 直接将数组/ ...
最新文章
- 原来deepin部署环境还是那么简单(只不过要用root权限)
- [NOI2012]美食节
- Linux装c编译器gcc,c编译器进阶之路,linux下的gcc c编译器使用教程
- 别再瞎搞数仓了!BAT内部大神:数据仓库不是谁都可以建的
- NetBeans 时事通讯(刊号 # 74 - Sep 30, 2009)
- 拼多多市值创新高,成中国第四大互联网公司!
- 手机上使用油猴插件 Tampermonkey
- 神是什么?神即道 道法自然 如来 ---《天道》王志文饰丁元英 左小青饰芮小丹
- 程炳皓的金矿:开心网“记账”组件
- 《东周列国志》第六十五回 弑齐光崔庆专权 纳卫衎宁喜擅政
- win10系统更新后打开chrome浏览器几秒后自动闪退
- 影响力(罗伯特·西奥迪尼)读书笔记思维导图
- Linux XAMP is currently only availably as 32 bit application.
- 视频教程-react电影院在线选座功能-ReactJS
- 计算机打印状态错误,打印机出现错误状态是怎么回事,教您解决办法
- 关于数据库加密你不能不知道的秘密
- Java web video 视频开发
- ICESat2数据hd5文件的预处理
- 用Windows Media Service 9 实现VOD广播和点播系统(上)
- 国债逆回购和债券型基金基础
热门文章
- render函数介绍,以及 render: h =gt; h(App)
- config kubectl_kubectl config 命令使用说明
- 郑州旅游职业学院计算机宿舍,郑州旅游职业学院宿舍条件,宿舍几人间环境好不好(图片)...
- 计算机毕业设计之java+ssm医院资产管理系统
- ibatis里面if else 用法
- 五种最短路径算法的总结(待更新)
- 为虚拟机创建远程用户
- 利用VC实现图像的特殊显示效果
- Mybatis核心源码赏析(二)
- evaluate函数