该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