首页 > 编程语言 >作为java的一个库来使用wvtool

作为java的一个库来使用wvtool

时间:2023-05-10 17:08:18浏览次数:42  
标签:文件 文本 java 词条 WVTool Java new wvtool 库来


该WVTool可作为一个独立的Java库或RapidMiner环境的一个插件来使用。在这里,我们将主要讨论WVTool作为一个java库来使用是如何实现的。

1.1 安装
作为Java库使用WVTool,首先从SourceForge上WVTool/ homepage1上下载wvtool包 ,解压缩档案,并把wvtool.jar文件和所有的jar文件放置到lib子目录中。

要使WVTool能应用起来,需要处理两种基本步骤:

1.         从给定的一组文本文件来创建一个词表(定义向量空间的维度);

2.         基于创建的词表创建向量空间。词表中包含的所有词条连同一些统计数字(例如,在有多少文件,词条)都被用来矢量化 。矢量化的词表中的词条用来决定向量空间的维度和权值。

以上两个步骤需要两个基本输入参数。首先,输入样本文件清单,告诉系统处理哪些文本文件;第二,配置对象,它告诉系统各个步骤所使用的处理方法。

1.2 定义Input
Input列表告诉WVTool哪些学习文本文件应该处理。列表中每项包含以下信息:

 

l         URI的文本资源。目前,这可以是本地文件/目录或网址

如果是本地目录文件,在此目录中的所有文件都被处理(包含子目录) 。作为WVTool的扩展,其他类型的URI也可以处理的很好,只要用户提供了一个方法来处理它们(见2.3 )

l         文本的语言类型(可选)

l         文件类型(可选)

文件类型分为文本文件(txt)、pdf文件(pdf)、网页文件(htm/html)和xml文件(xml)

l         解析文本的字符集比如UTF-8(可选)

l         对象位置序号(可选)

文本将被处理成为对象,如主题。这种信息通常是用于文本自动分类,但也可以用来作为和词条关联做他用。这个对象序号范围从0到M - 1 ,其中m是对象数目

 

在下面的例子中,Input列表通过调用addEntry创建了三个对象,三个对象是建立两个指向文件的本地文件系统和一个指向一个网页。

//创建三个对象,初始化Input列表
WVTFileInputList list = new WVTFileInputList(3); 
//添加对象
list.addEntry( new WVTDocumentInfo("data/alt.atheism","txt",English,0)); 
list.addEntry( new WVTDocumentInfo("data/soc.religion.christian","txt",English,1));
list.addEntry( new WVTDocumentInfo(
"http://www-ai.cs.uni-dortmund.de","html",English,2));

每个入口都被定义为一个对象。

1.3 配置
WVTool作为一个模块化的设计方式,允许最大的灵活性和可扩展性。总的思路是,矢量和词表由固定的步骤顺序建立。对于每一步的矢量化过程中,用户可以通过Java来实现每个步骤。这个类可以是一个已经包含在这个工具里或一个自己创建一个新的类来替换。唯一的制约因素是,它必须引用已经定义好的相应接口来实现。下面,将详细说明这些步骤的Java实现:

l         TextLoader "

该TextLoader负责打开一个流的处理文件。目前,wvtool提供了一个加载器能够读取本地文件和网址。相应的类被称为UniversalLoader,应该可以满足大多数应用。

UniversalLoader –从本地文件或者url地址载入文本流(默认)

l         Decoder "

如果文字被编码/封包(例如,在HTML代码) ,它必须在矢量化前被解码为纯文本。目前,只有纯文本(没有解码必要)和XML / HTML全文基于标记语言(标签会被忽略)的支持。

SimpleTagIgnoringReader –从没有解码的文本中去除标签。

XMLInputFilter –解码文件并从中去除XML标签

TextInputFilter 读取纯文本文件.

PDFInputFilter –对PDF格式中的文本部分解压缩。

SelectingInputFilter –根据文件的扩展名自动匹配文件过滤器(默认)。

 

在这里特别指出:对于编码器,包括PDFInputFilter ,所有的Input列表资料都通过编码器进行编码,如果没有指定,系统将使用默认的编码器进行编码对文件进行解析。

请注意,目前的编码器不能自动决定的XML和HTML文件。

l         CodeMapper

在某些情况下,编码的内容需要映射成为另外一种编码。例如:人们可能要从法文文本删除所有的地方口音。在这一步。目前只有一个虚构的对象支持。

DummyCharConverter ,没有采取任何行动(默认) 。

l         Tokenizer "

Tokenizer用来对整个文档进行分词使之成为独立的单位。

Tokenization在整个任务过程中是最重要的。虽然矢量化往往只需要一个简单的启发就足够了。目前,只有一个tokenizer可以利用,它使用的Unicode是格式来决定是一个字符还是一个字母。所有非字母字符都被假定为分隔符,因此分词的结果只能包含字符。此外,有一个tokenizer 可以记录这个分词的特征。

SimpleTokenizer -基于字母和非字母分词(默认) 。

NGramTokenizer创建字符特征项。

l         WordFilter "

In this step, tokens that should not be considered for vectorization are filtered. These are usually tokens appearing very often (referred to as 搒topwords? Standard English and German stopword lists are included. You may also specify the stopwords using a file.

StopWordFilterFile -reads stopwords from a file.

StopWordsWrapper -a standard English stopword list (default).

StopWordsWrapperGerman -a standard German stopword list.

DummyWordFilter -does not filter anything.

CombinedWordFilter -combines two or more word filters in a disjunctive way.

在这个步骤中,不应被视为是对矢量过滤。这些通常是常常出现(称为停用词?标准英语和德语停用词名单也包括在内。您也可以指定停用词使用的文件。

StopWordFilterFile从档案读取停用词。

StopWordsWrapper ,一个标准的英文停用词列表(默认) 。

StopWordsWrapperGerman ,一个标准的德国停用词清单。

DummyWordFilter ,不过滤什么。

CombinedWordFilter ,在析取的方式上结合了两个或两个以上的词过滤器。

l         Stemmer/Reducer

一般的,这个通常是用来映射不同的文法格式。目前,该系统融合了几种不同的算法:stemmer

LovinsStemmerWrapper  lovings stemmer(默认)

PorterStemmerWrapper –porter stemmer

SnowballStemmerWrapper –snowball stemmer

ToLowerCaseConverter -转换中的所有字符的成为小写

DictionaryStemmer ,使用手动指定的字典字,减少了基础形式(见4.2.1的更多信息)

DummyStemmer ,没有采取任何行动

WordNetHypernymStemmer用途词一个词来取代其杂交pernym (见4.2.2的更多信息)

WordNetSynonymStemmer用途词一个词来取代的代表性元素的synset (见4.2.2的更多信息)

l         VectorCreation

在分词完成计数之后。向量空间就得被创建。有几种不同的方案来实现,他们是基于下面的计数方式:

fij:在J个文档中的i个词条的数量。

fdj:在j个文件中的整个词条数量

fti:在所有文档中i个词条至少出现一次

基于这些计算,目前4个对象可以实现:

1、  TFIDF;

2、  TermFrequency ;

3、  TermOccurrences;

4、  BinaryOccurrences 。

l         Output

输出步骤决定生成向量写入的目标。目前,只有通过文件支持。这一步必须设定因为没有默认情况下写的载体。

 

该WVTool可以通过指定其中的Java类用于某一特定的步骤。这项工作可以在一个静态的方式(每个文件相同的Java类是使用)或动态( Java类的选择取决于属性的文件,如语言或编码) 。以下两个例子说明这一进程。第一个例子设置Java类的产出一步一个静态方法。

FileWriter outFile = new FileWriter(wv.txt"); "
WordVectorWriter wvw = new WordVectorWriter(outFile, true); 
config.setConfigurationRule(WVTConfiguration.STEP_OUTPUT,
new WVTConfigurationFact(wvw));

第二个例子选择算法产生动态的,根据语言文字的书面文件中:

final WVTStemmer dummyStemmer = new DummyStemmer(); 
final WVTStemmer porterStemmer = new PorterStemmerWrapper(); 
config.setConfigurationRule(WVTConfiguration.STEP_STEMMER, new WVTConfigurationRule() { 
public Object getMatchingComponent(WVTDocumentInfo d) throws Exception { 
if(d.getContentLanguage().equals(english")) 
return porterStemmer;
 else
return dummyStemmer; } });

写你自己的对象(执行相应的接口)您可以使用自己的方法,而不是那些提供的工具。

1.4 Using Predefined Word Lists
在某些情况下,有必要准确界定向量空间的维度,WVTool不能缺少词条的计数和文件的。要做到这一点,通过下面的例子可以来描述如何通过创建词条列表(创造一个单词表,只有两个项目) :

List dimensions = new Vector(); 
dimensions.add(apple"); 
dimensions.add("pc"); "
wordList = wvt.createWordList(list, config, dimensions, false);

最后的参数决定是否附加条款中出现的文本应增加词表。

 

标签:文件,文本,java,词条,WVTool,Java,new,wvtool,库来
From: https://blog.51cto.com/u_873039/6262732

相关文章

  • ibatis查询返回java.util.HashMap结果列表
    DAO的实现类中的代码:Java代码returnMapgetItemNames(){ returngetSqlMapClientTemplate().queryForMap("getItemNameMap",null,"key","value");}SqlMap配置文件中的代码:Java代码<resultMapid=map-item-name"class=......
  • 使用ICTCLAS JAVA版(ictclas4j)进行中文分词(附ictclas,停用词表,commons-lang-2.4.jar下
    一、ICTCLAS的介绍中国科学院计算技术研究所在多年研究基础上,耗时一年研制出了基于多层隐码模型的汉语词法分析系统ICTCLAS(InstituteofComputingTechnology,ChineseLexicalAnalysisSystem),该系统的功能有:中文分词;词性标注;未登录词识别。分词正确率高达97.58%(最近的973专......
  • java读取文件——以自动贩卖机为例
    上一篇做自动售卖机时用的是初始化定义商品列表,但实际上每一次启动售货机时售货机显示的是上一次购买结束后的库存。我们用一个.txt记录一下库存,然后利用File类将数据读取出来展示。我这里设置了一个商品就为一行,名称占12个字节,价格是4个字节,数量是11个字节,再加上转行符读取文......
  • Java 反射的综合详细复习提纲
    Java反射的综合详细复习提纲1.反射基础知识1.1什么是反射1.2反射的作用1.3反射的核心类1.4反射的优缺点2.Class类的相关方法2.1获取Class对象2.2Class对象的常用方法2.3ClassLoader类3.Field类的相关方法3.1获取类属性信息3.2Field类常用方法3.3......
  • JAVA代码编写的30条建议推荐
    JAVA代码编写的30条建议推荐http://topmanopensource.iteye.com/blog/667247 (1)类名首字母应该大写。字段、方法以及对象(句柄)的首字母应小写。对于所有标识符,其中包含的所有单词都应紧靠在一起,而且大写中间单词的首字母。例如:ThisIsAClassNamethisIsMethodOrFieldName   ......
  • java乱码
    这是因为你的控制台代码页(CodePage)设置有问题。建议用chcp命令检查一下当前的代码页,如果不是936(简体中文,GB2312),可以用chcp936设置代码页。建议同时检查一下系统语言和地区设置,否则可能再次出现相同的问题。......
  • java8一个List转化为另外一个List
    List<String>filterTags=Lists.newArrayList();List<Promotion>promotionList=filterTags.stream().map(f->{Promotiontag=newPromotion(context);tag.setLabel(f);tag.setCode(f);......
  • Java判断一个字符串是否是url
    Java判断一个字符串是否是url方法一正则表达式importjava.util.regex.Matcher;importjava.util.regex.Pattern;publicclassURLValidator{privatestaticfinalPatternURL_PATTERN=Pattern.compile("^((https?|ftp|file)://)?"+"([\\w......
  • IE 6下 a javascript:void(0)问题
     在购物页面的“立即购买”按钮是用a标签来做的,设置了href="javascript:void(0);",同时在a上面添加了onclick事件,目的是在点击之后处理Cookies并跳转到订单页面。反复测试发现ie6下没有跳转,ff下是正常的。在网上搜到的结果是ie6的bug导致这样的结果。 摘自网络产生这样的结果是......
  • javascript基础练习
     本练习根据w3cschool:https://www.w3cschool.cn/javascript/javascript-conventions.html 1.javascript简介1.1JavaScript是脚本语言JavaScript是一种轻量级的编程语言。JavaScript是可插入HTML页面的编程代码。JavaScript插入HTML页面后,可由所有的现......