Weka学习 -- StringToWordVector 源代码学习(1)
代码整个运行流程
- 參数设置
- input数据,设置数据格式
- batchFinished(),处理数据(Tokenzier,Stemming,Stopwords)
- determineDictionary(); 统计计算(TF,IDF)
- 归一化
- output
一些变量和方法的作用
- m_Dictionary , m_DocsCounts 变量与 m_OutputCounts变量
意义
//TreeMap类型成员变量m_Dictionary 记录<word,新属性index>对;详细类型为TreeMap<String,Integer>, 每个String 的word所映射的index。
// 计算每一个单词在多少个文档中出现过,保存在这个数组。
数组index是word相应映射的index(与m_Dictionary相应)。
//控制m_Dictionary 中的Integer是输出0/1(表示单词是否在文档中出现),还是count单词在文档中出现的次数。
一般要将它设置为true。
- m_minTermFreq 和 m_WordsToKeep
- 内部类Count 类及变量的意义
- 改动详细的TF*IDF公式:
if (m_TFTransform == true) {
|D| / |{d \in D : t\ind}| ). D表示全部的文档集。
log(value)中的value肯定大于等于1 //当然这里需保证分母不为0,即word至少在一个文档中出现过,否则可idf(t,D)= log(
|D| / |{d \in D : t\ind}|+1 ).
|D| / |{d \in D : t\ind}| )
当然也能够依据须要详细改动(TFIDF详细信息wiki就可以)
/
(double) m_DocsCounts[index.intValue()] ),也即把原先记录的词频fij变成fij*log(文档数/该单词在多少个文档中出现过)。就是我们用的TF-IDF。
注意假设要达到这个效果仅仅有把m_IDFTransform
以及m_OutputCounts同一时候设置成true,并保持m_TFTransform为false(否则的话就是两个log相乘了)。
- Normalization
归一化主要针对TF(t,d_单词频率(单词t在文档d中出现的次数)的来进行归一化。
经常用法:
//FILTER_NORMALIZE_ALL 能够换位 FILTER_NORMALIZE_TEST_ONLY
或 FILTER_NONE
//-N 1 表示採用FILTER_NORMALIZE_ALL=1 归一化方法。
public static final int FILTER_NORMALIZE_TEST_ONLY = 2;
忽略nominal类型的列。
- Tokenzier
StringToWordVector中。默认的tokenzier。 -tokenizer weka.core.tokenizers.WordTokenizer -delimiters " \r\n\t.,;:\'\"()?!"
Tokenzier的作用就是对于一个长的String,遍历扫描一遍。按那些字符进行切分。
若须要按句子为单位进行切分,能够新建新的Tokenzier,选择- delimiters 为". ! \n ? "或中文句子结束符号“。!
?”等
- Stemmer
若须要按句子为单位进行切分,能够新建新的Tokenzier,选择- delimiters 为". ! \n ? "或中文句子结束符号“。!
?”等
morphology and information
retrieval, stemming is
the process for reducing inflected (or sometimes derived) words to their stem,
base or rootform—generally
a written word form. 如能将cats,catlike。catty等word都转化为词根cat。
by Martin Porter1980,extend at 2000,建议用这个。但不可直接使用,须要下载包。)两类。这Weka里面自带的Stemmer都是针对英语语言的。自己能够依据须要进行更改。
此外还有PTStemmer等,下载对应的jar包都能够使用。详细使用參考http://weka.wikispaces.com/Stemmers
特点:简单易用,但table表量比較大。
derived words 去掉。
②对于汉语的话。就相当于把同义词转换为同一个词? 这样也不太好,应该是把类型”吃了吗”,“吃饭了吗”,“吃饭了没”转化为同一个词。
如将以ed。ing,ly结尾的词去掉其后缀,生成词根。动词的时态大部分有规则。一部分没规则,对于没规则的能够建一个lookup表。二者相结合。
- StopWords
当然对于派生词或中午近义词等。在这里进行过滤会stoplist会更短一点(由于word已经经过Stemming了)。
- StringToWordVector默认不採用不论什么停止词。
- 设置採用默认停止词rainbow(英文)m_useStoplist。
- 自己定义停止词。覆盖默认停止词File m_Stopwords
通过StringToWordVector.setStopwords(new File(stopwordfile));方法能够设置自己定义的停止词。同一时候默认的停止词不在生效。
(知道这样的效果就先用着,详细实现代码待细看^_^)
- Tokenizer、Stemming与 Stopwords的顺序:
- 首先Tokenizer。依据单词切割符取出word。
若默认的 WordTokenizer
採用" \r\n\t.,;:\'\"()?!" 等英文切割符。这一部会把"boy."等后面的‘.'句号或感叹号等都去掉。也可弥补IKAnalyzer中文分词不足。
- 然后Stemming。取出词根。
- 最后在轮到Stopwords。
stopwords.is(word)做词根word在stopword的list中,则取出。应该不会对此单词进行map映射和在vector出现。
filter.setStopwords(new File(stopwordfile));
这样设置一下,就能够将stopwordfile中的word(一行一个)当成stopword啦。
- SparseInstance
:
{0 class3,2 2,3 3,6 1,7 1,13 1}
。 如3 ?
. Note that the omitted values in a sparse instance are 0, they are not "missing" values! If a value is unknown, you must explicitly represent it with a question mark (?).
都会把第一个string或nominal的值存储为0。 SparseInstances这里这样表示并非一个bug,能够视为一个‘display’bug。你保存arff数据会发现和你读取的数据是一样的。
- 其它
- StrngToWordVector默认仅仅对全部的属性进行字符串转word向量,你能够设置指定的属性进行转换。
- StringToWordVector会将全部的非转换的属性放在处理后的Instances的前面, 当中firstCopy 在函数中的意思是表明前面有多少个非处理的属性。
如有3个不用处理的属性。firstCopy就是3.
Weka学习 -- StringToWordVector 源代码学习(1)的更多相关文章
- 贪吃蛇游戏C语言源代码学习
源代码下载地址为:www.clang.cc 阅读学习了源代码,并做了简单的注释和修改,里面只用了链表数据结构,非常适合C语言入门者学习阅读. 程序可在VS2013下编译运行. #include< ...
- struts2源代码学习之初始化(一)
看struts2源代码已有一段时日,从今天開始,就做一个总结吧. 首先,先看看怎么调试struts2源代码吧,主要是下面步骤: 使用Myeclipse创建一个webproject 导入struts2须 ...
- [Java] LinkedList / Queue - 源代码学习笔记
简单地画了下 LinkedList 的继承关系,如下图.只是画了关注的部分,并不是完整的关系图.本博文涉及的是 Queue, Deque, LinkedList 的源代码阅读笔记.关于 List 接口 ...
- 开源中国安卓client源代码学习(一) 渐变启动界面
开源中国安卓client源代码学习(一) 渐变启动界面 准备学习安卓开发, 看到网上有人推荐开源中国安卓client的源代码, 说里面包括了大部分技术, 于是准备好好研究研究. 特开通此系列博客来记录 ...
- 读Flask源代码学习Python--config原理
读Flask源代码学习Python--config原理 个人学习笔记,水平有限.如果理解错误的地方,请大家指出来,谢谢!第一次写文章,发现好累--!. 起因 莫名其妙在第一份工作中使用了从来没有接 ...
- nginx源代码学习资源(不断更新)
nginx源代码学习是一个痛苦又快乐的过程,以下列出了一些nginx的学习资源. 首先要做的当然是下载一份nginx源代码,能够从nginx官方站点下载一份最新的. 看了nginx源代码,发现这是一份 ...
- JDK源代码学习系列07----Stack
JDK源代码学习系列07----Stack 1.Stack源代码很easy ...
- djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习
Django REST framework JWT djangorestframework-jwt自带的认证视图进行用户登录验证源代码学习 SECRET_KEY = '1)q(f8jrz^edwtr2 ...
- JDK源代码学习系列04----ArrayList
JDK源代码学习系列04----ArrayList 1 ...
随机推荐
- alert 执行顺序问题
<p><span id="span1">Hello World!</span></p> <script type=" ...
- JDBC连接数据库的几种方法
一. 最古老的方法(通过 Driver 接口直接连接数据库) 首先创建一个 Driver 实现类的对象 Driver dirver = new com.mysql.jdbc.Driver(); 准备连 ...
- angualr4 路由 总结笔记
使用cli命令创建根路由模块 ng g cl app.router 或自己建一个路由配置文件 如:app/app.router.ts // app/app.router.ts // 将文件修改为 im ...
- MeasureString 通过文本宽度获取绘制高度
using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using S ...
- params修饰符
http://msdn.microsoft.com/zh-cn/library/w5zay9db.aspx params 关键字可以指定采用数目可变的参数的方法参数. 可以发送参数声明中所指定类型的逗 ...
- Linux ext2文件系统之初步思考
数据存放在磁盘中,磁盘最小存取单位sector(512Byte);文件系统中存储的最小单位是 块(Block),大小通常(1KB,2KB,4KB...), 一个block对应多个sector,因而可用 ...
- PHP Xdebug安装及配置
1.首先在官方网站下载dll文件; Xdebug官方网站 2.将php_xdebug.dll文件放入php/ext文件夹下; 3.编辑php.ini,在文件最后加入如下代码: ; Xdebug zen ...
- Centos 6.9 安装 Redis 3.2.9
依赖包和常用包yum install gcc gcc-c++ make zlib-devel readline readline-devel tkutil tk tkutil-devel tk-dev ...
- 2017EIS CTFwriteup
EIS2017也就是2017年高校网络信息安全管理 运维挑战赛,全国一百多所高校参赛,侥幸拿了个地区三等奖,事先不知道理论赛占分比,不然就会是二等奖(吐槽),生活没有如果,下次努力吧. 比赛已经结束大 ...
- Python 动态导入模块
动态导入模块 目录结构: zhangsandeMacBook-Air:1110 zhangsan$ tree . . ├── lib │ └── aa.py ├── test1.py lib目录下 ...