分享

Weka开发[48]——用Weka文本分类

 lzqkean 2013-07-22

译自:http://weka./Text categorization with WEKA< xmlnamespace prefix ="o" ns ="urn:schemas-microsoft-com:office:office" />

导入

    进行任何分类任务,数据都必须是ARFF或是XRFF格式。

目录

    你可以用下面的工具将文本文件转换成ARFF格式:

1. TextDirectoryToArff工具

    它将一个包含文本文件的目录转换成一个ARFF文件。

2. TextDirectoryLoader 转换器

    这个转换器基于TextDirectoryToArff工具实现,它在weka.core.converters包中。

要使用TextDirectoryLoader,你要将目录处理成下面这种结构(译注:简单的说就是将每个类别的文本文件放到一个目录中,并将这个目录名命令为类别名,如果你还不明白,在下面的例子节,你可以去下载)(tree命令可以看你的目录结构,linuxwindows都可以)

...

 |

  - text_example

    |

    - class1

    |  |

    |  file1.txt

    |  |

    |  file2.txt

    |  |

    |  ...

    |

    - class2

    |  |

    |  another_file1.txt

    |  |

    |  another_file2.txt

    |  |

    |  ...

    上面的目录结构可以用下面的命令转换成一个ARFF文件:

java weka.core.converters.TextDirectoryLoader -dir text_example > text_example.arff

CSV 文件

CSV文件可以很容易地通过Weka Explorer或是通过命令行用CSVLoader导入:

java weka.core.converters.CSVLoader file.csv > file.arff

    默认情况下,非数值型属性会以NOMINAL(离散型)属性方式导入,这对于文本型数据是不太合适的,特别是有人想在后面使用StringToWordVector过滤器时,要将属性指定为STRING类型,可以对数据运行NominalToString过滤器(weka.filters.unsupervised.attribute包中),并指定属性下标或指定要转换的范围(注意,这个过滤器会将类别属性也进行转换)。为了保留属性类型,你需要将文件保存为ARFF或是XRFF格式(或是以一种压缩格式版本进行保存)

第三方工具

    TagHelper工具,它可以将文本转换成切词或是非切词的unigramsbigramspart-of-speech bigrams,和一些用户定义的特性,然后保存成ARFF格式,现在支持的语言有英文,德文,中文。西班牙文和葡萄牙语的处理工作正在进行。

处理文本数据

转换

    Weka中的大多数分类器不能处理String类型的属性,所以如果你要学习一个分类器,应该将String类型先转换成合适的格式,比如,StringToWordVector过滤器可以进行TF/IDF 转换。

    StringToWordVector过滤器将类别属性放在输出文件的开始,如果你喜欢它还是在最后的位置,你可以用如下设置使用Recorder过滤器:

weka.filters.unsupervised.attribute.Reorder -R 2-last,first

    另外,你可以用MultiFilter你可以将两个过滤器一次运行,这样在比如Explorer方式下就简单点。

停词

    StringToWordVector过滤器可以使用不同的停词表,它自身也有一个内嵌的停词表(基于Rainbow系统)。你可以用-stopwords选择来加载外部的停词文件,停词文件的格式就是一行一个停词,如果前面有’#’就会被认为是注释被忽略。

UTF-8

    如果你要处理的文本文件是non-ASCII码文件,比如阿拉伯文,你也许会在Windows下遇到一些显示上的问题,Java是支持显示UTF-8的,所以也包括阿拉伯语,默认情况下,JavaWindows下使用code page 1252,它会使显示其它问题时有问题。为了修正这个错误,你需要在启动Weka时修改java命令行。

java -Dfile.encoding=utf-8 -classpath ...

    -Dfile.encoding=utf-8是告诉Java使用UTF-8编码而不是默认的CP1252

    如果你想通过启动目录方式启动weka,你可以在RunWeka.ini的修改fileEncoding值为UTF-8

例子

text_example.zip 含一个作为示例的目录和文件,它可以被TextDirectoryLoader转换器载入。

text_example.zip 它使用TextDirectoryLoader转换器将一个目录转换成一个数据集,并用StringToWordVector过滤,再用过滤过的数据建立一个分类器。

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多