NLTK和jieba这两个python的自然语言包(HMM,rnn,sigmoid

HMM(Hidden Markov Model,隐马尔可夫模型) CRF(Conditional Random Field,条件随机场),

RNN深度学习算法(Recurrent Neural Networks,循环神经网络)。输入条件连续 LSTM(Long Short Term Memory)则绕开了这些问题依然可以从语料中学习到长期依赖关系,输入条件不连续是用, 核心是实现了  dL(t)dh(t)和  dL(t+1)ds(t)反向递归计算。

sigmoid函数,该函数输出0到1之间的值

NLTK和jieba这两个python的自然语言包,前者,我主要是对分词后的数据进行分析; 而后者,我主要用于对文章进行分词!

part.1 包的安装

pip install nltk pip install jieba

一条文本分析的漫漫长路就此开始!

part.2 怎么使用

从这里开始,我根据着自己写的类来对这两个包进行一些简单的讲解。

2.1 引用

# coding=utf-8 # -*- coding: cp936 -*- import jieba import jieba.posseg as pseg import codecs import re import os import time import string from nltk.probability import FreqDist open=codecs.open

2.2 自定义词典和停用词的引入

自定义词典是我们在分词的时候避免把我们需要的词组分成小词而导入的,而停用词,则是我们在分词过程中,将对我们分词过程中的干扰词排除在外的词典。

#jieba 分词可以将我们的自定义词典导入,格式 “词” “词性” “词频” jieba.load_userdict(‘data/userdict.txt‘)

#定义一个keyword类 class keyword(object):     def Chinese_Stopwords(self):          #导入停用词库         stopword=[]         cfp=open(‘data/stopWord.txt‘,‘r+‘,‘utf-8‘)   #停用词的txt文件         for line in cfp:             for word in line.split():                 stopword.append(word)         cfp.close()         return stopword

2.3 分词和挑选

先来讲讲分词,分词可以说是中文文章分析的第一步,中文不像英文,每个单词之间有空格隔开,我们首先需要对文章进行分词,也就是把长长的文本切割成单个的词,而后才能对这些词进行后续的操作。

def Word_cut_list(self,word_str):         #利用正则表达式去掉一些一些标点符号之类的符号。         word_str = re.sub(r‘\s+‘, ‘ ‘, word_str)  # trans 多空格 to空格         word_str = re.sub(r‘\n+‘, ‘ ‘, word_str)  # trans 换行 to空格         word_str = re.sub(r‘\t+‘, ‘ ‘, word_str)  # trans Tab to空格         word_str = re.sub("[\s+\.\!\/_,$%^*(+\"\‘]+|[+——;!,”。《》,。:“?、[email protected]#¥%……&*()1234567①②③④)]+".\                           decode("utf8"), "".decode("utf8"), word_str)

wordlist = list(jieba.cut(word_str))#jieba.cut  把字符串切割成词并添加至一个列表         wordlist_N = []         chinese_stopwords=self.Chinese_Stopwords()         for word in wordlist:             if word not in chinese_stopwords:#词语的清洗:去停用词                 if word != ‘\r\n‘  and word!=‘ ‘ and word != ‘\u3000‘.decode(‘unicode_escape‘) \                         and word!=‘\xa0‘.decode(‘unicode_escape‘):#词语的清洗:去全角空格                     wordlist_N.append(word)         return wordlist_N

什么叫挑选呢? 其实在我们进行中文文本的分析时,不是每个词都有用的。那什么样的词就能表述出文章意思呢? 比如:名词! 那怎么把名词提取出来呢???????????

def Word_pseg(self,word_str):  # 名词提取函数         words = pseg.cut(word_str)         word_list = []         for wds in words:             # 筛选自定义词典中的词,和各类名词,自定义词库的词在没设置词性的情况下默认为x词性,即词的flag词性为x             if wds.flag == ‘x‘ and wds.word != ‘ ‘ and wds.word != ‘ns‘ \                     or re.match(r‘^n‘, wds.flag) != None \                             and re.match(r‘^nr‘, wds.flag) == None:                 word_list.append(wds.word)         return word_list

2.4 排序和运行

先前,我们对分词和分词后的挑选进行了一定的分析了解,那么怎么把我们得到的这个此列表进行分析呢?简单的就是先统计词频,这样一分析,有词频,我们自然而然就想到了排序。

def sort_item(self,item):#排序函数,正序排序         vocab=[]         for k,v in item:             vocab.append((k,v))         List=list(sorted(vocab,key=lambda v:v[1],reverse=1))         return List

def Run(self):         Apage=open(self.filename,‘r+‘,‘utf-8‘)         Word=Apage.read()                       #先读取整篇文章         Wordp=self.Word_pseg(Word)              #对整篇文章进行词性的挑选         New_str=‘‘.join(Wordp)         Wordlist=self.Word_cut_list(New_str)    #对挑选后的文章进行分词         Apage.close()         return  Wordlist

def __init__(self, filename):         self.filename = filename

2.5 main函数的读取分析

看了那么多,我们还没用到nltk这个包,那么在这里,我们就要开始使用这个包了! 在这里我主要是对文件夹里的一些文件进行分析,然后对每篇文件的关键词进行统计了。也就是简单的词频统计排序,输出。 最初我的想法,我只输出前10个关键词,但是在我经过多次实验后,我觉得固定数目的关键词,对我们的研究很是偏颇,那么我就使用百分比来输出关键词。

if __name__==‘__main__‘:     b_path = ‘data/all‘     a_path = ‘data/Result‘     roots = os.listdir(b_path)     alltime_s = time.time()     for filename in roots:         starttime = time.time()         kw = keyword(b_path + ‘/‘ + filename)         wl = kw.Run()         fdist = FreqDist(wl)         Sum = len(wl)         pre = 0         fn = open(a_path + ‘/‘ + filename, ‘w+‘, ‘utf-8‘)         fn.write(‘sum:‘ + str(Sum) + ‘\r\n‘)         for (s, n) in kw.sort_item(fdist.items()):             fn.write(s + str(float(n) / Sum)+"      " +str(n)+ ‘\r\n‘)             pre = pre + float(n) / Sum             if pre > 0.5:                 fn.write(str(pre))                 fn.close()                 break         endtime = time.time()         print filename + ‘       完成时间:‘ + str(endtime - starttime)

print "总用时:" + str(time.time() - alltime_s)

时间: 2024-10-15 20:16:18

NLTK和jieba这两个python的自然语言包(HMM,rnn,sigmoid的相关文章

Mac OS10.9 下python开发环境(eclipse)以及自然语言包NLTK的安装与注意

折腾了大半天,终于把mbp上python自然语言开发环境搭建好了. 第一步,安装JDK1.7 for mac MacOS10.9是自带python2.7.5的,够用,具体的可以打开终端输入python显示版本号码.在10.9中MacOS没有自带的JDK1.7所以我们得先安装JDK1.7 for mac 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html 选择Mac OS

OpenCV和Zbar两个Python模块实现二维码和条形码识别

在我们的日常生活中,处处可见条形码和二维码. 在以前,我们去逛书店时,或者你现在随手拿起你身边的一本书,你肯定能看到书本的封页后面印有一排黑色线条组成的标签,也就是条形码:你去你们学校的自助机上借书还书时识别的也是条形码:哦,对了,你还记得每次大型考试答题卡上都会贴上监考老师分发给你的那个标签吗?还是条形码:甚至现在你随随便便逛个超市或便利店,收银员或者自助机也都是通过扫商品条形码给你计价的.条形码在我们的日常生活中真的是随处可见. 到了后来,2016年之后,二维码也渐渐开始普及起来,现在二维码

Python中的包ImportError

前言 Python中的包给我提供了很好的代码组织,相似的功能模块放在同一个包内,不仅代码结构清晰,而且调用起来也比较方便(可以用*导入) 但是,我们在刚开始使用Python包的时候总是会遇到导入错误"ImportError: No module named 'xxx'“,下面我们来简单介绍一下如何解决这类问题 Python中的包 Python中的包就和C#中的dll一样都是一些模块(或者类库)的集合.Python中新创建的包其实只有两个文件,一个是以包名命名的文件夹和其中的一个__init__.

CentOS 7 64位环境下安装llvm以及python的llvmlite包

llvm是一个很强大的编译器,具体的内容请读者自行百度一下哈 安装步骤: 1.安装llvm 2.安装python的llvmlite包 一.安装llvm(版本是3.5) 1.需要的文件 LLVM source code Clang source code Clang Tools Extra source code Compiler RT source code LibC++ source code 上面这些文件在这个链接:http://llvm.org/releases/download.html

Python/模块与包之模块

Python/模块与包之模块 1.什么是模块? 模块就是py文件 2.为什么要用模块? 如果在解释器上进行编码,把解释器关闭之前写的文件就不存在了,如果使用模块的话就能永久保存在磁盘中. 3.如何使用模块? 3.1 import    通过import导入要使用的模块 1 #spam.py 2 print('from the spam.py') 3 4 money=1000 5 6 def read1(): 7 print('spam->read1->money',1000) 8 9 def

繁简转换OpenCC,autogb 和 autob5,iconv,python的jianfan包

OpenCC OpenCC 是跨平台.多语言的开放中文转换库,除了基本的简繁转换功能外,用户还可以选择对不同用词习惯和异体字的处理方式. OpenCC 还提供方便的网页转换界面. OpenOffice.Org的转换功能 OpenOffice.Org提供简繁功能,使用很方便(在工具->语言->中文简繁转换). Google翻译功能 Google翻译也可以做简繁转换,效果分析见后面. 使用cconv转换 cconv建立在iconv之上,增加了词语转换能力,效果分析见后面. Ubuntu用户可以用命

49.Python使用requests包进行HTTP交互方法详解

简介 使用方法 传递QUERY参数 定制请求头 填写cookie 填充请求体 处理响应对象 重定向与访问历史 超时 Session对象 根据响应获取请求 SSL认证 HTTP认证 基本认证 摘要认证 代理场景 HTTPHTTPS代理 SOCKS代理 简介 Python的HTTP包有urllib.urllib2.httplib等,但是都需要了解较多的HTTP原理才能编码,借助requests包可以在较高的抽象层次上完成HTTP交互过程的开发.安装requests使用pip install requ

3. python中的包和库

3.1模块和包的概念 当代码越来越多时,当把所有的代码都集中于一个文件中时,难以维护 将代码分开放在不同的py文件中,易于维护,同一名字的变量和函数互不影响 如 #a.py x=5 def f1(): pass #b.py x='str' def f1(iterable): pass a.py和b.py中变量和函数互不影响 将a.py称为模块a,将b.py称为模块b,可见,模块的名字就是.py文件的名字 引入第三方的模块 #test.py import math print math.pow(2

初试主题模型LDA-基于python的gensim包

http://blog.csdn.net/a_step_further/article/details/51176959 LDA是文本挖掘中常用的主题模型,用来从大量文档中提取出最能表达各个主题的一些关键词,具体算法原理可参阅KM上相关文章.笔者因业务需求,需对腾讯微博上若干账号的消息进行主题提取,故而尝试了一下该算法,基于python的gensim包实现一个简单的分析. 准备工作 安装python的中文分词模块, jieba 安装python的文本主题建模的模块, gensim (官网 htt