如何创建一个包含带引号的字符串的字符串,该字符串包含Java中的带引号的字符串?

时间:2015-12-17 03:40:56

标签: java string machine-learning weka tokenize

我想把一个带有选项的字符串放入Weka中。选项字符串内部是weka tokenizer字符串,在tokenizer字符串内部是分隔符选项字符串。我收到错误消息"没有为-delimiters选项给出值。"如何格式化字符串?

这是我的代码:

String[] options = weka.core.Utils.splitOptions("weka.filters.unsupervised.attribute.StringToWordVector "
            + "-R first-last -W 1000 -prune-rate -1.0 -N 0 -stemmer weka.core.stemmers.NullStemmer "
            + "-stopwords-handler weka.core.stopwords.Null -M 1 -tokenizer "
            + "\"weka.core.tokenizers.NGramTokenizer -max 5 -min 1 -delimiters \" \\r\\n\\t.,;:\\\'\\\"()?!\"");

StringToWordVector remove = new StringToWordVector();

This question没有解决我的问题。

3 个答案:

答案 0 :(得分:3)

您收到的错误消息显示在-delimeters选项后找不到任何值。原因是Weka检测到字符串在-delimeter查询参数之后立即以双引号结束。造成这种情况的根本原因是一个流氓引号,它出现在之前属于weka.core.tokenizers.NGramTokenizer查询参数的-tokenizer术语:

String[] options = weka.core.Utils.splitOptions("weka.filters.unsupervised.attribute.StringToWordVector "
        + "-R first-last -W 1000 -prune-rate -1.0 -N 0 -stemmer weka.core.stemmers.NullStemmer "
        + "-stopwords-handler weka.core.stopwords.Null -M 1 -tokenizer "
        + "\"weka.core.tokenizers.NGramTokenizer -max 5 -min 1 -delimiters \" \\r\\n\\t.,;:\\\'\\\"()?!\"");
           ^ rogue quotation mark.  Bad.

将字符串更改为以下内容,一切正常:

String[] options =
    weka.core.Utils.splitOptions(
        "weka.filters.unsupervised.attribute.StringToWordVector "
      + "-R first-last -W 1000 -prune-rate -1.0 -N 0 "
      + "-stemmer weka.core.stemmers.NullStemmer "
      + "-stopwords-handler weka.core.stopwords.Null -M 1 "
      + "-tokenizer weka.core.tokenizers.NGramTokenizer -max 5 -min 1 "
      + "-delimiters \" \\r\\n\\t.,;:\\\'\\\"()?!\"");

答案 1 :(得分:1)

您传递给splitOptions的字符串的内容是:

weka.filters.unsupervised.attribute.StringToWordVector -R first-last -W 1000 -prune-rate -1.0 -N 0 -stemmer weka.core.stemmers.NullStemmer -stopwords-handler weka.core.stopwords.Null -M 1 -tokenizer "weka.core.tokenizers.NGramTokenizer -max 5 -min 1 -delimiters " \\r\\n\\t.,;:\\\'\\"()?!"

我不确定-tokenizer的参数应该是什么,但是传递给它的字符串有一个-delimiters标志,没有任何值,这与错误是一致的你报道了。

也许你打算将此传递给-tokenizer

"weka.core.tokenizers.NGramTokenizer -max 5 -min 1 -delimiters \" \\r\\n\\t.,;:\\\'\\"()?!\""

-delimiters的参数是字符串。

答案 2 :(得分:1)

可能使用\

转义引号
String[] options = weka.core.Utils.splitOptions("\"weka.filters.unsupervised.attribute.StringToWordVector\"" + "\"-R first-last -W 1000 -prune-rate -1.0 -N 0 -stemmer weka.core.stemmers.NullStemmer\""+ "\"-stopwords-handler weka.core.stopwords.Null -M 1 -tokenizer\""+ "\"weka.core.tokenizers.NGramTokenizer -max 5 -min 1 -delimiters \" \\r\\n\\t.,;:\\\'\\\"()?!\"");