文本聚类——文本预处理

文本是非结构化的数据,我们无法直接对文本进行聚类处理。在此之前,应该对文本进行一些预处理操作,将
文本信息转化成统一的结构化的形式。再对这些结构化的数据进行聚类。

文本预处理对于聚类的效果有着重要的作用,预处理的质量高低影响着聚类结果的好坏。
对于英文文本的预处理一般包含以下几个步骤:

  1. 分词
  2. 去除非英文文本
  3. 拼写检查,转换小写
  4. 词干化处理
  5. 去停用词
  6. 词频统计
  7. 特征选择

分词——tokenize

分句:tokenize segment

NLTK中使用nltk.sent_tokenize(text) #对文本按照句子进行分割

分词:tokenize sentence

NLTK中使用nltk.word_tokenize #对句子按照单词进行分割,返回一个列表,表示每个句子为单位的分词结果

1

2
tokens = [ word.lower() for sentence in nltk.sent_tokenize(text) 

for word in nltk.word_tokenize(sentence)]

去除非英文文本

使用正则表达式剔除,python re模块中的re.search就可以
search(pattern,string):在字符串中寻找模式

1

2

3
for token in tokens:

if re.search('[a-zA-Z]', token):

filtered_tokens.append(token)

转换小写

使用lower()方法
此方法返回的所有基于大小写字符被转化为小写字符串的一个副本。

1

2

3
    tokens = [ word.lower() for sentence in nltk.sent_tokenize(text) 

for word in nltk.word_tokenize(sentence)]

sentence)]

词干化处理——stemming

Stemming 是抽取词的词干或词根形式(不一定能够表达完整语义)
NLTK中提供了三种最常用的词干提取器接口,即

  1. Porter stemmer
  2. Lancaster Stemmer
  3. Snowball Stemmer。

我是采用了第三种snowball stemmer

1

2
from nltk.stem.snowball import SnowballStemmer

stemmer = SnowballStemmer("english")

去停用词——stopwords

使用nltk.corpus的stopwords
分词后使用filter进行筛选

1

2

3
from nltk.corpus import stopwords

//disease_List分词结果

filtered = [w for w in disease_List if(w not in stopwords.words('english')]

tf_idf

含义解释

TF-IDF是Term Frequency - Inverse Document Frequency的缩写,即“词频-逆文本频率”。它由两部分组成,TF和IDF。

使用scikit-learn进行TF-IDF预处理

在scikit-learn中,有两种方法进行TF-IDF的预处理。分别是:

  1. 用CountVectorizer类向量化之后再调用TfidfTransformer类进行预处理。
  2. 直接用TfidfVectorizer完成向量化与TF-IDF预处理。
    我使用的第二种
    1
    
    2
    
    3
    
    4
    
    from sklearn.feature_extraction.text import TfidfVectorizer
    
    tfidf2 = TfidfVectorizer()
    
    re = tfidf2.fit_transform(corpus)
    
    print re
    

N-gram基本原理

语言模型的作用在于构建为字符串s的概率分布p(s),也即是一个字符串作为一个句子出现的概率。语言模型与句子是否合法没有关系,即便一句话是符合逻辑的,但仍可以认为其出现的概率为零。但反过来不成立,即如果一句话不符合逻辑,那么直接认为这句话出现的概率为零。

对于一个有m个词的句子s=sw1w2w3…wm而言,其概率为:
P(s)=p(w1)p(w2|w1)p(w3|w1w2)…p(wm|w1w2…wm),即产生第i个词的概率是由产生的i-1个词共同决定的,这i-1个词称为第i个词的历史。如果历史的长度为i-1,词汇集有L个,那么将会有L的i-1次方个历史情况,这种数据量是不可想象的。为了解决这个问题,引用等价类的方法减少参数,即:如果两个历史最近的n-1(1≤n≤k)个词相同,那么把这两个历史映射到同一个等价类当中。这种方法就称为N元语法(n-gram),N是指的等价类的个数。

  1. 当N等于1时,即n-1=0,出现在第i位上的词独立与历史,记为unigram;
  2. 当N等于2时,即n-1=1,出现在第i位上的词只与前一个词有关,也就是一阶马尔科夫链,记为bigram;
  3. 当N等于3时,即n-1=2,出现在第i位上的词与前两个词有关,也就是二阶马尔科夫链,记为trigram。
    以bigram为例,为了使i=1时有意义,在句子之前加一个标记;为了使所有字符串的概率纸盒等于1,在句子末尾加一个标记。为了估计p(wi|wi-1),可以用最大似然估计(MLE)计算:p(wi|wi-1)=c(wi-1wi)/(求和)c(wi-1wi),其中c表示wi-1wi在给定文本中的出现次数。

原文:大专栏  文本聚类——文本预处理

原文地址:https://www.cnblogs.com/petewell/p/11612084.html

时间: 2024-08-27 05:42:33

文本聚类——文本预处理的相关文章

[python] 使用Jieba工具中文分词及文本聚类概念

声明:由于担心CSDN博客丢失,在博客园简单对其进行备份,以后两个地方都会写文章的~感谢CSDN和博客园提供的平台.        前面讲述了很多关于Python爬取本体Ontology.消息盒InfoBox.虎扑图片等例子,同时讲述了VSM向量空间模型的应用.但是由于InfoBox没有前后文和语义概念,所以效果不是很好,这篇文章主要是爬取百度5A景区摘要信息,再利用Jieba分词工具进行中文分词,最后提出文本聚类算法的一些概念知识.        相关文章:        [Python爬虫]

文本聚类算法介绍

转载请注明出处:http://blog.csdn.net/xiaojimanman/article/details/44977889 http://www.llwjy.com/blogdetail/41b268618a679a6ec9652f3635432057.html 个人博客站已经上线了,网址 www.llwjy.com ~欢迎各位吐槽~ ----------------------------------------------------------------------------

文本挖掘之文本聚类(MapReduce)

刘 勇  Email:[email protected] 简介 针对大数量的文本数据,采用单线程处理时,一方面消耗较长处理时间,另一方面对大量数据的I/O操作也会消耗较长处理时间,同时对内存空间的消耗也是很大,因此,本文引入MapReduce计算模型,以分布式方式处理文本数据,以期提高数据处理速率.本文结合Kmeans和DBSCAN算法,对上述算法进行改进,其中借鉴Kmeans聚类方法(类别个数的确定性)以及DBSCAN聚类方法(基于密度),并在数据处理过程中引入多个Reducer对数据进行归并

一个简单的文本聚类实现(python)

具体实现如下,使用python+结巴分词+scikit-learn实现一个简单的文本聚类得到会议室数据,直接从DBA线上数据库得到预约数据,如下所示,共有3列,分别是会议ID,会议标题和会议时间 因为是中文,因此要进行分词,使用结巴分词对会议标题进行分词并过滤停用词分词代码如下(jiebafenci.py) #encoding=utf-8 import sys import re import codecs import os import shutil import jieba import

文本挖掘之文本聚类(OPTICS)

刘 勇  Email:[email protected] 简介 鉴于DBSCAN算法对输入参数,领域半径E和阈值M比较敏感,在参数调优时比较麻烦,因此本文对另一种基于密度的聚类算法OPTICS(Ordering Points To Identify the Clustering Structure)展开研究,其为DBSCAN的改进算法,与DBSCAN相比,该算法对输入参数不敏感.OPTICS算法不显示地生成数据聚类,其只是对数据对象集合中的对象进行排序,获取一个有序的对象列表,其中包含了足够的信

文本挖掘之文本聚类(借力打力)

刘勇    Email:[email protected] 简介 在文本相似度判定中,作者将该算法用于文本聚类中,其核心思想通过比较两个文本向量中元素的相似度,即向量中所含的元素相似个数越多,则两个向量越相似,继而上述文本越相似.作者在短文本相似判定中采用了余弦相似度该算法来实现,本文借鉴数学集合取交集,借用现有组件来实现上述算法功能,继而减少工作量,也具备便捷性,也能取得较好的效果. 数学集合 该方法的思想为:先将文本数据采用中文切分,将其切分为词汇(词组.短语.词汇的统称,本文不做细粒度划分

利用LDA进行文本聚类(hadoop, mahout)

项目原理概述 利用sqoop将数据从MySQL导入到HDFS中,利用mahout的LDA的cvb实现对输入数据进行聚类,并将结果更新到数据库中.数据流向图如下 mahout算法分析 输入数据格式为<IntegerWritable, VectorWritable>的matrix矩阵,key为待聚类文本的数字编号,value为待聚类文本的单词向量Vector, Vector的index为单词在字典中的编号, value为TFIDF值. 算法相关参数详解(不包含hadoop运行参数)项目中所有参数设

文本挖掘之文本聚类(DBSCAN)

刘勇   Email:[email protected] 简介 鉴于基于划分的文本聚类方法只能识别球形的聚类,因此本文对基于密度的文本聚类算法展开研究.DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种典型的基于密度的聚类方法,可以找出形状不规则的聚类,而且聚类时无需事先知道聚类的个数.  基本概念 DBSCAN算法中有两个核心参数:Eps和MinPts(文献与程序中经常使用).前者定义为邻域半径,后者定义

文本聚类教程

本人曾做机器学习方向,由于实习需要转做文本聚类.分类的工作,虽然大致相似,但仍是新手,过程和结果也仅供大神指教.本博包含了作者两周的专心研究调试及由数千行测试得到了300余行代码精华,如需转载,请注明出处. 什么是文本聚类? 文本聚类是将一个个文档由原有的自然语言文字信息转化成数学信息,以高维空间点的形式展现出来,通过计算那些点距离比较近来将那些点聚成一个簇,簇的中心叫做簇心.一个好的聚类要保证簇内点的距离尽量的近,但簇与簇之间的点要尽量的远. 文本聚类的难点是什么? 聚类是一种非监督学习,也就