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语言特点多模型_GitHub - zkyzq/py-kenlm-model: python | 高效使用统计语言模型kenlm:新词发现、分词、智能纠错等...相关推荐

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

    py-kenlm-model python | 高效使用统计语言模型kenlm:新词发现.分词.智能纠错等 之前看到苏神[重新写了之前的新词发现算法:更快更好的新词发现]中提到了kenlm,之前也自己 ...

  2. python调用nastran_基于Python语言的NASTRAN模型向Abaqus模型转换程序

    基于 Python 语言的 NASTRAN 模型向 Abaqus 模型转 换程序 张 涛 李三平 杜双龙 [期刊名称] 中国科技信息 [年 ( 卷 ), 期] 2016(000)008 [总页数] 3 ...

  3. Python语言学习之双下划线那些事:python和双下划线使用方法之详细攻略

    Python语言学习之双下划线那些事:python和双下划线使用方法之详细攻略 目录 双下划线介绍 1.关于双下划线的函数或方法或属性 双下划线介绍 1.关于双下划线的函数或方法或属性 __name_ ...

  4. python语言的开发者_写给.NET开发者的Python教程(一):引言

    距离上一篇博文已过去8个月了,这段时间发生了很多事情导致没能持续更新博客.这段时间除了工作繁忙,业余时间都投入到AI技术的学习中,后面一段时间将会给大家分享我作为一个.NET开发人员在深度学习领域学习 ...

  5. 以下可以采用python语言保留字的是-以下选项中,不是Python语言保留字的是_学小易找答案...

    [单选题]以下选项中,不是 Python 语言保留字的是 [连线题]将动机理论及其解释说明连线: [单选题]以下选项中,不是Python语言合法命名的是 [单选题]在Python函数中,用于获取用户输 ...

  6. Python语言学习之常见语句命令那些事:python和常见语句命令(条件语句、pass语句)使用方法之详细攻略

    Python语言学习之常见语句命令那些事:python和常见语句命令(条件语句.pass语句)使用方法之详细攻略 目录 Python常见语句命令 1.python的条件语句 2.Python之pass ...

  7. python语言编程入门第一讲-第1讲:Python基本知识快速入门

    上一讲介绍了Python编程的概念,我们知道了编程的目的和意义, 同时,还简要的展示了Python最新版软件的安装和验证, 没看到的可以点下方的链接直达: 人类在进行重复性的工作的时候往往会感到枯燥乏 ...

  8. python语言程序设计基础上海交通大学_北京交通大学:Python语言程序设计

    『课程目录』:$ y0 q8 G3 Q" Z% p6 K│ ├─第一章概述, c) e/ m) X# s- B, r│ │ 1.1.1第1课时计算机起源 – 计算机发展史中三位里程碑人物,快 ...

  9. python语言程序设计基础答案第四章_《Python语言程序设计基础》第四章笔记

    4.1 程序的分支结构 4.1.1 单分支结构 if : if True: print("条件正确") 4.1.2 二分支结构 if : else : if True: print ...

  10. python语言三大基本控制结构_【笔记】《python语言程序设计》——程序的控制结构...

    一.前言 学习就是一个不断的自下而上,自上而下的过程. 前段时间,学着用python实现网站的数据爬取,隐约get到python的一些语法和用法,感觉就是语法不难,关键在于解决问题的思维. 这是需求驱 ...

最新文章

  1. Linux命令详解:[7]获得命令帮助
  2. idea2019中文版
  3. python html模块调用_Python html 模块简介
  4. mongo oplog 整理
  5. Elasticsearch Mapping 详解
  6. 小白开学Asp.Net Core 《十》
  7. rabbitmq基于http的认证和授权
  8. linus系统下载_系统管理程序卷土重来,Linus拒绝并阅读电子邮件,以及更多行业趋势
  9. 新华网评:企业的信息安全关把好了吗?
  10. 消耗报表数据库呈现了流动变乱的回滚段破损(三)
  11. 此windows副本不是正版
  12. 音乐转换成16进制写进单片机的方法(音符频率和音符的播放长度时间计算)
  13. 全球各大网站的服务器使用什么操作系统和WEB服务器(转)
  14. php设置pdf下载加密文件,pdf文件加密方法 PDF文件怎样加密 如何给PDF文件添加打开口令...
  15. 计算机网络汇聚层,31. 接入层 汇聚层 核心层 三层典型网络架构
  16. win10系统 oracle11g的安装流程
  17. NAT和路由器 基本概念
  18. GPS定位,经纬度附近地点查询–C 实现方法
  19. 并查集——银河英雄传说()
  20. VHDL 语言学习笔记(1)

热门文章

  1. 饿了吗分页插件el-pagination显示英文问题解决
  2. (更新时间)2021年3月28日 python基础知识(装饰器)
  3. 小红书KOL品牌排行榜!小红书直播数据
  4. 北邮计算机发展,准备报考北京邮电大学的信息科学与技术专业,发展前景如何?...
  5. Android 颜色,6位和8位数颜色的区别和应用
  6. 华为在海外市场受损,三星则因此而取得利润与份额齐升
  7. 三维气象要素场--Unity3d篇
  8. 从 Hadoop 到 Snowflake,2023年数据平台路在何方?
  9. 怎么分辨CN2 GIA,CN2 GT,CTG,163直连,国际线路?
  10. 和计算机交朋友 ppt,第2课  与计算机交朋友