文本挖掘 java_文本挖掘
一个暑假回来到了该找工作的紧张时期了。不过项目还是要继续做嘛,╮(╯_╰)╭,放假前用python爬到了一些网页,也尝试着分了词。现在进入文本挖掘阶段吧。
R在数据挖掘和机器学习方面好似很方便,安了试试看。界面跟Matlab有几分相似呢……o(≧v≦)o~~
-------2013.9.13----python分词、词频统计、寻找公共词--
R还是有点偏向学术计算的语言了,最后还是换上半生不熟的python来做。之前爬到了网页数据(见上片文章【网络爬虫】最后8.3的记录),而且尝试了分词。现在完善了以下处理:
1、对所有爬到是网页数据进行分词(没有设立自定义词典)
如果设置自定义词典,那么分词效果会更好
2、对各个网页的词进行词频统计,尔后用python的sorted函数对dictionary对象进行统计
python中的词频统计没有找到像hadoop那样的map-reduce方法,最后用for循环统计的,应该有改进的空间
3、找出公共词部分
因为是从百度旅游上抓的测试数据,因此会有一些公共词诸如:
“用户,登录,lvyou,百度,com,/,下载,http,2013Baidu,注册,baidu,©,,,】,日,我们,游记,【,旅游,必读,|,前,使用,攻略,联系,免费,自由,指南,目的地,画册,台湾,首页,美食,协议,”
这些词在之后的聚类中是没有意义的分量,所以感觉应该在做特征向量前清洗掉。这些公共词统计是采用抽样的方法做的,而不是把每一个页面文件都拿出来进行统计。采样先定义一个长度为N的随机数组,N就是要采样的样本数,然后在处理每个页面时,如果刚好是第i个页面,而且i属于随机数组中的数,那么就把这个页面中的单词加入到公共词的统计中。
基本上公共词统计就是取若干个集合的“交集”,不过这里不是严格意义上的要求某个单词在所有集合中都出现才算,只要满足出现在60%的页面中,就算是公共词了。这个筛选比例和采样数量N的不同组合也会有有不同的公共词提取效果。
当N=50,出现率为66.6%时,提取到的公共词为:
当N=100,出现率为66.6%时,提取到的公共词为:
所有的词都很容易想到为什么会成为公共词,但是为什么会有“台湾”这个词呢?不可能所有人的游记里面都提到“台湾”吧?现在回忆一下是因为当时在抓数据的时候百度旅游刚好在推一个台湾自由行的项目,所以的页面都有这个项目的广告链接。
如果我们放宽出现率的限制到50%时,会是什么效果呢?
当N=50,出现率为50%时,提取到的公共词为:
似乎变化不大。再放宽到15%呢?
当N=100,出现率为15%时(即在100个样本中,出现的次数在100*0.15次以上的词语),提取到的公共词为:
第一次运行:
第二次运行:
第三次运行:
可以看到还是有被错提取的词,那么再看一下它们的补集(即100个样本中,出现次数小于100*0.15次的词语),截取了一部分如下图
可以看到是很多具体的地名或者形容词。
备份一下代码(没有做代码的结构设计,只是在做算法验证)
#-*- coding: utf-8 -*-
importosimportcollectionsimportrandomfrom operator importitemgetterimportjiebaimportjieba.analysefrom collections importCounter
sampleNumber= 100 #采集样本的个数
filterRate = 0.15 #字符的出现率(筛选率)
readpath = 'G:\DMProject\pages'writepath= 'G:\DMProject\wordsVectors'freqpath= 'G:\DMProject\\freq'commonWords= {} #公共词
defwriteFile(fileName, content):
wfile= open(fileName,'wb')
wfile.write(content)
wfile.close()defgetRandomList(n, range_start, range_end):
rand_list=[]
count= 1;while count !=n:
temp= random.randrange(range_start,range_end,1)if temp not inrand_list:
rand_list= rand_list +[temp]
count= count + 1;returnrand_list
filelist=os.listdir(readpath)#获得随机序列,并排序
randlist = getRandomList(sampleNumber,1,len(filelist))
randlist.sort()printrandlist
index= 1
for item infilelist:#定义读写路径
tempreadPath = readpath + "\\" +item
tempwritePath= writepath + "\\" +item
tempfreqPath= freqpath + "\\" +item#获得文本内容
handler = open(tempreadPath,'r')
content=handler.read()
handler.close()#去掉文本中的空格、回车符
cleanContent = "".join(content.split())#分词
seg_list =jieba.cut(cleanContent)
wordsList= (','.join(seg_list)).split(',')#以回车分隔各词并写入文件
after = '\n'.join(seg_list).encode('utf-8')
writeFile(tempwritePath,after)#统计词频并写入文件
table ={}for word inwordsList:iftable.has_key(word):
table[word]= table[word] + 1
else:
table[word]= 1sorted_table= sorted(table.iteritems(), key=itemgetter(1),reverse =True)#打印词频
freqContent = "";for key,value insorted_table:
freqContent+= key.encode('utf-8')+ "," + str(value).encode('utf-8') + '\n'writeFile(tempfreqPath,freqContent)#若该文件刚好是被抽样到的文件,则进行公共词统计
if index inrandlist:for key,value insorted_table:ifcommonWords.has_key(key):
commonWords[key]= commonWords[key] + 1
else:
commonWords[key]= 1index+= 1commonWordsCache=[]
sorted_commonWords= sorted(commonWords.iteritems(), key=itemgetter(1),reverse =True)for word, count insorted_commonWords:if count > sampleNumber*filterRate:
commonWordsCache= commonWordsCache +[word]
commonWordsCache= ','.join(commonWordsCache).encode('utf-8')printcommonWordsCache
View Code
------ 2013.9.4 ----R中的中英文分词-----
有个分词的插件,叫snowball。直接在R的菜单栏上点击Packages-> install package(s),然后选择beijing,然后在列表里面找到snowball就可以了。
按完以后可以看到界面中的提示。
我们按照 @刘思喆 在Text Mining With R中的例子测试一下是否安装成功。
>library(Snowball)> SnowballStemmer(c('functions', 'stemming', 'liked', 'doing'))
[1] "function" "stem" "like" "do"
>
可以看到snowball已经可以帮我们提取词干了。
现在我们来试试tokenizer:
>library(RWeka)> NGramTokenizer('吃货 都是 热爱生活 的 好孩子')
[1] "吃货 都是 热爱生活" "都是 热爱生活 的" "热爱生活 的 好孩子"[4] "吃货 都是" "都是 热爱生活" "热爱生活 的"[7] "的 好孩子" "吃货" "都是"[10] "热爱生活" "的" "好孩子"
如果我们不认为添加空格会是什么情况呢?
> NGramTokenizer('欢迎光临Elar的博客,今天是2013年9月4号')
character(0)
可以看到没有什么结果呢……
那如果想对普通的中文文本分词,可以使用一个叫Rwordseg的包。这个包是李健开发的中文分词工具。
在R中安装Rwordseg的指令为:
install.packages("Rwordseg", repos = "http://R-Forge.R-project.org")
安装好可见提示信息:
我们测试一下Rwordseg的分词功能:
>library(Rwordseg)
Loading required package: rJava#Version: 0.0-5
> segmentCN('欢迎光临Elar的博客,今天是2013年9月4号,这里是中国陕西西安')
[1] "欢迎" "光临" "elar" "的" "博客" "今天" "是" "2013年"[9] "9月" "4号" "这里" "是" "中国" "陕西" "西安"
>
现在中文分词也搞定了,我们来试试Text Mining吧。
安装tm包。
可以看到tm包还有mail和webmining插件,是不是用来挖掘邮件和网络内容的呢?以后探索。
先安装最基本的tm包,安装完成后的提示:
tm包中可以对动态语料库(语料库在内存中)和静态语料库(语料库在硬盘中)进行分析。静态语料库要用到一个叫filehash包的支持。
Reference:
文本挖掘 java_文本挖掘相关推荐
- 文本挖掘(part1)--文本挖掘概述
学习笔记,仅供参考,有错必纠 文章目录 文本挖掘概述 什么是文本挖掘 文本挖掘的意义 文本挖掘的基本流程和任务 基本流程 常见的分析任务 各个应用方向的举例 文本挖掘的基本思路 文本中所包含信息的层次 ...
- 用mysql做文本挖掘_手把手教你做文本挖掘
一.文本挖掘定义 文本挖掘指的是从文本数据中获取有价值的信息和知识,它是数据挖掘中的一种方法.文本挖掘中最重要最基本的应用是实现文本的分类和聚类,前者是有监督的挖掘算法,后者是无监督的挖掘算法. 二. ...
- 【自然语言处理与文本分析】用两个项目案例介绍文本挖掘方法论。
文本挖掘概要 文本挖掘的应用:(有实际案例) 运用文本挖掘进行公司治理(台湾证券交易所的案例) 证券交易所的功能就是监管上市公司的问题(财务不实,内部被掏空的问题).但是会出现一个盲点 比如一家公司宣 ...
- 文本挖掘的量化投资应用大起底!
1. 金融文本挖掘背景介绍 文本挖掘作为数据挖掘的一个分支,挖掘对象通常是非结构化的文本数据,常见的文本挖掘对象包括网页中的论坛.微博.新闻等.文本挖掘是目前金融量化研究的一个非常热门的领域,其主要原 ...
- 什么是文本挖掘以及应该如何学习?
文本挖掘是一种从大量文本数据中提取信息和知识的方法.它通常使用自然语言处理技术来识别文本中的模式和关系,并使用数据挖掘技术来发现隐含的规律.文本挖掘的应用领域广泛,包括情感分析.市场调研.客户服务.新 ...
- 十分钟学习自然语言处理概述
十分钟学习自然语言处理概述 摘要:近来自然语言处理行业发展朝气蓬勃,市场应用广泛.笔者学习以来写了不少文章,文章深度层次不一,今天因为某种需要,将文章全部看了一遍做个整理,也可以称之为概述.关于这些问 ...
- 万维网Web自动搜索引擎(技术报告)
万维网Web自动搜索引擎(技术报告) 邓雄(Johnny Deng) 2006.12 网络时代的信息量每8个月翻一番,如今的网页以100亿来计算:网络搜索已成为仅次于电子邮件的第二大网络应用.2005 ...
- 人工智能之知识图谱概述(一)
文章目录 碎碎念 第一章 概念 一.知识图谱概念和分类 1.知识图谱的概念 2.知识图谱的分类 二.知识工程发展历程 三.知识图谱的知识图谱 第二章 技术人才篇 1.知识表示与建模 (1)知识表示模型 ...
- Web 挖掘技术总结 (参考太多,都没列出来)
Web挖掘技术 一.数据挖掘 数据挖掘是运用计算机及信息技术,从大量的.不完全的数据集中获取隐含在其中的有用知识的高级过程.Web 数据挖掘是从数据挖掘发展而来,是数据挖掘技术在Web 技术中的应用. ...
最新文章
- linux c++ 报错 invalid use of incomplete type 解决方法
- Identity Server 4 原理和实战(完结)_建立Identity Server 4项目,Client Credentials 授权实例...
- 【MFC】带进度条的状态栏
- 【洛谷 2661】信息传递
- 地磅称重软件源码_电脑设备器件+塔吊主吊臂+撇渣管、丝杆+地磅称重传感器+极柱触头盒弯板+批式循环谷物干燥机+升降机标准节...
- 迈达斯cdn使用说明_快速了解CDN是什么
- 记录一次阻塞引发的系统超时
- 锐捷客户端在Linux下的使用。
- 如何批量转换图片格式?怎样统一修改图片格式?
- Qt Creator 的下载与安装
- android ibeacon距离,iBeacon使用蓝牙连接范围精确到1-3米
- Weex 在双11会场的大规模应用
- 微信支付~微信手机网站支付(mweb)
- 一台笔记本只有一个显卡,如何同时连接两台显示器
- 机器学习基础:模型评估(上)
- idea手工添加jar依赖包
- Uncaught SyntaxError: missing ) after argument list 解决办法
- 病毒分析与防护实验2—— 搭建反病毒实验室
- 什么是加密?有哪些加密类型和加密算法?
- html解析json天气预报数据,国家气象局天气预报JSON数据接口详解