N元分词算法
时间:2022-05-04
本文章向大家介绍N元分词算法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在自然语言处理中,我们经常需要用到n元语法模型。
其中,有关中文分词的一些概念是我们需要掌握的,譬如:
unigram 一元分词,把句子分成一个一个的汉字 bigram 二元分词,把句子从头到尾每两个字组成一个词语 trigram 三元分词,把句子从头到尾每三个字组成一个词语.
我们来简单的做个练习:
输入的是断好词的文本,每个句子一行。 统计词unigram和bigram的频次,并将它们分别输出到`data.uni`和`data.bi`两个文件中。
下面代码为网络资源
#!/usr/bin/env python
class NGram(object):
def __init__(self, n):
# n is the order of n-gram language model
self.n = n
self.unigram = {}
self.bigram = {}
# scan a sentence, extract the ngram and update their
# frequence.
#
# @param sentence list{str}
# @return none
def scan(self, sentence):
# file your code here
for line in sentence:
self.ngram(line.split())
#unigram
if self.n == 1:
try:
fip = open("data.uni","w")
except:
print >> sys.stderr ,"failed to open data.uni"
for i in self.unigram:
fip.write("%s %dn" % (i,self.unigram[i]))
if self.n == 2:
try:
fip = open("data.bi","w")
except:
print >> sys.stderr ,"failed to open data.bi"
for i in self.bigram:
fip.write("%s %dn" % (i,self.bigram[i]))
# caluclate the ngram of the words
#
# @param words list{str}
# @return none
def ngram(self, words):
# unigram
if self.n == 1:
for word in words:
if word not in self.unigram:
self.unigram[word] = 1
else:
self.unigram[word] = self.unigram[word] + 1
# bigram
if self.n == 2:
num = 0
stri = ''
for i in words:
num = num + 1
if num == 2:
stri = stri + " "
stri = stri + i
if num == 2:
if stri not in self.bigram:
self.bigram[stri] = 1
else:
self.bigram[stri] = self.bigram[stri] + 1
num = 0
stri = ''
if __name__=="__main__":
import sys
try:
fip = open(sys.argv[1],"r")
except:
print >> sys.stderr, "failed to open input file"
sentence = []
for line in fip:
if len(line.strip())!=0:
sentence.append(line.strip())
uni = NGram(1)
bi = NGram(2)
uni.scan(sentence)
bi.scan(sentence)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Laravel5.1 框架模型工厂ModelFactory用法实例分析
- 关于AIX挂载NFS写入效率低效的解决办法
- Linux系统下部署项目的设置办法
- PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
- ubantu 16.4下Hadoop完全分布式搭建实战教程
- Laravel5.1 框架模型查询作用域定义与用法实例分析
- 整理Linux中字符串的相关操作技巧
- Laravel5.1 框架Middleware中间件基本用法实例分析
- Linux基础命令之mktemp详解
- TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
- Laravel5.1 框架模型一对一关系实现与使用方法实例分析
- Linux中怎么查看已挂载的文件系统类型详解
- PHP实现笛卡尔积算法的实例讲解
- TP5框架简单登录功能实现方法示例
- 使用 Apache Web 服务器配置两个或多个站点的办法