令牌没有正确构建

时间:2012-12-09 13:48:38

标签: java text tokenize

我尝试使用以下代码对文本文件进行标记:

    String fileContent = "";  
    String fileContentTokens[];  
    try{  
        fileContent = new Scanner(new File(fname)).useDelimiter("\\Z").next();   
    } catch(Exception ex)  {  
        System.out.println(ex.getMessage());  
    }  

    fileContent = fileContent.replaceAll("\\s*([,.?!\"'()-:*;])\\s*", " $1 ");
    //System.out.println(fileContent);
    fileContentTokens = fileContent.split(" ");  

问题是令牌没有正确形成,我的意思是有些词仍附有引用,有些仍然有撇号。上面的代码应该在每个标点符号之间留下空白,因此它不会附加到它自己的单词上。例如:“那很酷”应该是“那很酷”。但出于某种原因,它并没有这样做。它只是为了一些词而不是全部这样做。

2 个答案:

答案 0 :(得分:0)

来自Java API:请注意,替换字符串中的反斜杠(\)和美元符号($)可能会导致结果与将其视为文字替换字符串时的结果不同;如果需要,请 Matcher.replaceAll使用 Matcher.quoteReplacement(java.lang.String) 来取消这些字符的特殊含义

答案 1 :(得分:0)

你的字符串中有另一种类型的撇号失败。

Karachi’s Manghopir area , DawnNews reported on Saturday . The

在该字符串中,您有 但是在你的正则表达式中,你有'

那些是不同的。将前撇号也添加到正则表达式中,它将起作用:

fileContent = fileContent.replaceAll("\\s*([,.?!\"'’()-:*;])\\s*", " $1 ");