veterbi

#!usr/bin/python
#coding=utf-8

import urllib2
import sys, time, re
import sys
import jieba
jieba.load_userdict("userdict.txt")
import jieba.analyse
import jieba.posseg as pseg
import os
jieba.initialize()
import operator
reload(sys);
sys.setdefaultencoding(‘utf8‘);

t1 = time.time()

url = "10.txt"
content = open(url, "rb").read()
#print type(content)
print ‘文章长度:‘, len(content)
strRe = re.sub(‘\s‘, ‘‘, content)   #用正则干掉所有的空白
print ‘用正则干掉所有的空白后,字符长度‘, len(strRe)

‘‘‘
fo = open("foo.txt", "wb")
fo.write(strRe);
# 关闭打开的文件
fo.close()
‘‘‘

#分词, 未登录词用veterbi分词
words = list(jieba.cut(strRe, cut_all=False))
print "分词的总数:", len(words)
wordset = sorted(set(words))
print "不重复的单词数:", len(wordset)

#TF-IDF
jieba.analyse.set_idf_path("extra_dict/idf.txt.big");
tf_idf_tags = jieba.analyse.extract_tags(strRe, topK = 10)
print "TF-IDF 未去除停用词, 获取10个关键词"
print(",".join(tf_idf_tags))

jieba.analyse.set_idf_path("extra_dict/idf.txt.big");
jieba.analyse.set_stop_words("extra_dict/cn_stop_words.txt")
tf_idf_stop_words_tags = jieba.analyse.extract_tags(strRe, topK = 10)
print "TF-IDF 去除停用词"
print(",".join(tf_idf_stop_words_tags))

#TextRank
#tagswords = jieba.analyse.textrank(content)
#print(",".join(tagswords))

print "TextRank, 获取10个关键词"
TextRank_words = jieba.analyse.textrank(strRe)
print(",".join(TextRank_words))

‘‘‘
list = words
fl = open(‘list.txt‘, ‘wb‘)

for i in range(len(list)):
    fl.write(list[i].encode(‘utf-8‘)+‘--‘)

fl.close()
‘‘‘

# 统计分词结果后,每个个分词的次数
wordsDict = {}
DictsMaxWordlen = 0
singal = ‘‘
for w in words:
    if wordsDict.get(w) == None:
        wordsDict[w] = 1
    else:
        wordsDict[w] += 1

    if DictsMaxWordlen <= wordsDict[w]:
        DictsMaxWordlen = wordsDict[w]
        global singal
        singal = w
        #print w

print "分词最多重复的次数:".decode(‘utf-8‘), DictsMaxWordlen , "分词是:".decode(‘utf-8‘),singal

#按字典值排序(默认为升序),返回值是字典{key, tuple}
sorted_wordsDict = sorted(wordsDict.iteritems(), key=operator.itemgetter(1))
#print type(sorted_wordsDict[1])    #tuple

classNumWord = {}

for w in sorted_wordsDict:
    if classNumWord.has_key(w[1]) == True:
        if w[0] not in classNumWord[w[1]]:
            classNumWord[w[1]].append(w[0])
    else:
        classNumWord[w[1]] = []
        classNumWord[w[1]].append(w[0])
#将字典排序,按照升序, 通过键排序,
sort_classNumWord = sorted(classNumWord.iteritems(), key=lambda asd:asd[0], reverse = False)
#print sort_classNumWord[20][1][0].encode(‘gb2312‘) 

wordslength = 0     #分词的总数
worldsNum = 0       #分词有多少个不同的词或词组
wordsFequencelist = {}  #分词出现的频次等级,从1到N次,并存储所对应等级的词语个数
for w in sort_classNumWord:
    worldsNum += w[0]
    wordslength += len(w[1]) * w[0]

    wordsFequencelist[w[0]] = []
    wordsFequencelist[w[0]].append(len(w[1]))

    #print "============================"
    #for i in range(len(w[1])):     #按照出现的频次,打印词组
     #   print w[1][i]
    #print "出现".decode(‘utf-8‘),w[0], "次的有:".decode(‘utf-8‘) ,len(w[1])
    #print "============================"      

sort_wordsFequencelist = sorted(wordsFequencelist.iteritems(), key=lambda asd:asd[0], reverse = False)

print ‘\t\t频率是单词出现的次数, 次数是出现对应次数的所有不同单词的总和‘
lenWords = 0
for wordsFequence in sort_wordsFequencelist:
	lenWords += 1
	print ‘频率:{0:<4} 词数:{1:>6}‘.format(wordsFequence[0], wordsFequence[1]), " ",
	if lenWords % 4 == 0:
		print

print
print "一共有".decode(‘utf-8‘), worldsNum, ‘个不同的词或词组‘.decode(‘utf-8‘)
print "一共有".decode(‘utf-8‘), wordslength, ‘个词或词组‘.decode(‘utf-8‘)

print
print
t2 = time.time()
tm_cost = t2-t1
print ‘运行时间‘, tm_cost

  

Building prefix dict from C:\Python27\lib\site-packages\jieba-0.36.2-py2.7.egg\jieba\dict.txt ...
Dumping model to file cache c:\users\og\appdata\local\temp\jieba.cache
Loading model cost 2.16899991035 seconds.
Prefix dict has been built succesfully.

时间: 2024-12-20 12:59:28

veterbi的相关文章

隐马尔可夫模型HMM与维特比Veterbi算法(一)

隐马尔可夫模型HMM与维特比Veterbi算法(一) 主要内容: 1.一个简单的例子 2.生成模式(Generating Patterns) 3.隐藏模式(Hidden Patterns) 4.隐马尔可夫模型(Hidden Markov Model) 一.一个简单的例子 考虑一个简单的例子,有人试图通过一片海藻推断天气--民间传说告诉我们'湿透的'海藻意味着潮湿阴雨,而'干燥的'海藻则意味着阳光灿烂.如果它处于一个中间状态('有湿气'),我们就无法确定天气如何.然而,天气的状态并没有受限于海藻的

隐马尔可夫模型HMM与维特比Veterbi算法(二)

隐马尔可夫模型HMM与维特比Veterbi算法(二) 主要内容: 前向算法(Forward Algorithm) 穷举搜索( Exhaustive search for solution) 使用递归降低问题复杂度 前向算法的定义 程序实现前向算法 举例说明前向算法 一.前向算法(Forward Algorithm) 目标:计算观察序列的概率(Finding the probability of an observed sequence) 1. 穷举搜索( Exhaustive search fo

hmm和Veterbi算法(一)

只是略微的看了些,有点感觉,还未深入,做个记录. 参考: 隐马尔可夫 (HMM).前 / 后向算法.Viterbi 算法 再次总结 谁能通俗的讲解下 viterbi 算法? 数学之美第二版的第 26 章 本文结构: 1.hmm三要素 2.维特比算法 3.简明例子 hmm三要素: 1.初始概率分布 π z1 可能是状态 1,状态 2 ... 状态 n,于是 z1 就有个 N 点分布: Z1 状态 1 状态 2 ... 状态 n 概率 P1 P2 ... Pn 即:Z1 对应个 n 维的向量. 上面

统计分词

#!usr/bin/python #coding=utf-8 import urllib2 import sys, time, re import sys sys.path.append("../") import jieba jieba.load_userdict("userdict.txt") import jieba.analyse import jieba.posseg as pseg import os jieba.initialize() import

stanford-segmenter一个简单例子

1.简介 stanford分词目前支持 Arabic 和 Chinese.它的原理是基于CRFs, CRFs分词的原理不难懂,就是把分词当作另一种形式的命名实体识别,利用特征建立概率图模型后,用Veterbi算法求最短路径.stanford nlp提供了源码demo,目前的版本是3.5.2. 下载地址:http://nlp.stanford.edu/software/segmenter.shtml 2.例子 step1: 新建project,将下载的stanford-segmenter-2015

自然语言处理之初始-语言模型

文本自然语言处理的一个最最最基本的一个问题:如何用数学符号或公式表示一段文本?如何计算一段文本在某种语言下出现的概率? 语言模型(用概率论的专业术语表示):为长度为m的字符串确定其概率分布P(w1,w2,...wm),其中w1到wm依次表示文本中的各个词语.概率值计算公式如下, 但是有个问题发现没有?加入一个文本超级长,会怎么样?从第三项开始计算难度就会很大.此时,有人提出了n元模型(n-gram model).那么n元模型是什么呢?它就是在估算条件概率时,忽略距离大于等于n的上文词的影响.则此