java 中用于文本分类的 StringToWordVectore 错误

StringToWordVectore error in java for text classification

1- 我尝试通过 java 编码将 StringToWordVector 过滤器应用于文本,但它不起作用。过滤器的输出不正确。 我使用的代码:

Instances instances = source.getDataSet();
instances.setClassIndex(instances.numAttributes()-1);
StringToWordVector stwv = new StringToWordVector();
//Splits a string into an n-gram with min and max grams.
NGramTokenizer tokenizer = new NGramTokenizer();
tokenizer.setNGramMinSize(1);
tokenizer.setNGramMaxSize(1);
tokenizer.setDelimiters(" \r\n\t.,;:'\"()?!'");
stwv.setTokenizer(tokenizer);

stwv.setDoNotOperateOnPerClassBasis(true);
stwv.setOutputWordCounts(true);
stwv.setDictionaryFileToSaveTo(new File("/forEclips/RandomForset/DictionaryFile.txt"));
//------------------------
stwv.setInputFormat(instances);
// Apply the filter
Instances dataFiltered = weka.filters.Filter.useFilter(instances, stwv);
System.out.println("\n\nFiltered data:\n\n" + dataFiltered.toString() );

输出如下:

@relation 'DIMS-weka.filters.unsupervised.attribute.StringToWordVector-R1-W10-prune-rate-1.0-C-N0-stemmerweka.core.stemmers.NullStemmer-stopwords-handlerweka.core.stopwords.Null-M1-O-tokenizerweka.core.tokenizers.NGramTokenizer -max 1 -min 1 -delimiters \" \r\n\t.,;:\\'\\"()?!\\'\"-dictionary/forEclips/RandomForset/DictionaryFile.txt 
@attribute class {Di,MS}
@attribute اشبو numeric
@attribute اللي numeric
@attribute المويه numeric
@attribute النار numeric
@attribute تشوفوا numeric
@attribute تعرفون numeric
@attribute حبايبي numeric
@attribute حجازي numeric
@attribute خلال numeric
@attribute دي numeric
@attribute زي numeric
@attribute سيدي numeric
@attribute صور numeric
@attribute في numeric
@attribute كتير numeric
@attribute كتييير numeric
@attribute كتيييير numeric
@attribute كده numeric
@attribute مثل numeric
@attribute من numeric
@attribute مو numeric
@attribute هل numeric
@attribute وعيشوا numeric
@attribute وقدود، numeric
@attribute يا numeric
@attribute يده numeric

@data
{0 MS,9 1,13 3,20 2}
{0 MS,9 3,13 1,20 2}
{0 MS,6 1,22 1}
{5 1,16 1,17 1,23 1,24 1}
{2 2,3 1,4 1,8 1,11 1,14 2,19 1,21 1,26 2}
{1 1,7 1,10 1,12 1,15 1,18 1,20 1,25 1}`

我们可以看到这里并没有把class放在@attribute.In段的末尾另外,在@data段,前三个实例,class在第一个,而最后三个,不要任何 class 和 class 的 id。 它应该在 class 的最后,它是 id.

2- 另外,我想为所有具有相同权重(值 =44)的实例添加一个类型为数字的属性 (newattribut)。
这意味着 @attribute 部分将如下所示:

   @attribute اشبو numeric
   @attribute اللي numeric
   @attribute المويه numeric
   @attribute النار numeric
   @attribute تشوفوا numeric
   @attribute تعرفون numeric
   @attribute حبايبي numeric
   @attribute حجازي numeric
   @attribute خلال numeric
   @attribute دي numeric
   @attribute زي numeric
   @attribute سيدي numeric
   @attribute صور numeric
   @attribute في numeric
   @attribute كتير numeric
   @attribute كتييير numeric
   @attribute كتيييير numeric
   @attribute كده numeric
   @attribute مثل numeric
   @attribute من numeric
   @attribute مو numeric
   @attribute هل numeric
   @attribute وعيشوا numeric
   @attribute وقدود، numeric
   @attribute يا numeric
   @attribute يده numeric
   @attribute newattribute numeric
   @attribute class {Di,MS}


   @data
   {8 1,12 3,19 2,26 44,27 MS}
   {8 3,12 1,19 2,26 44, 27 MS}
   {5 1,21 1,26 44,27 MS}
   {4 1,15 1,16 1,22 1,23 1,26 44,27 Di}
   {1 2,2 1,3 1,7 1,10 1,13 2,18 1,20 1,25 2,26 44,27 Di}
   {0 1,6 1,9 1,11 1,14 1,17 1,19 1,24 1,26 44,27 Di}

3- 我想使用此训练数据 class 通过 Naive baise、Random Forest 和 SVM 对文本进行验证。如何使用 java 中的 weka 库为训练和测试数据构建交叉验证。我尝试通过在 java 构建路径中添加 Libsvm 来使用 SVM,但它给我一个错误。

此致;

我发现这些网站对于使用过滤器 StringToWordVector 进行文本分类非常有用。 http://www.uky.edu/~nyu222/tutorials/Weka.htm https://www.youtube.com/watch?v=Tggs3Bd3ojQ&list=PLm4W7_iX_v4OMSgc8xowC2h70s-unJKCp&index=11