提问者:小点点

ICU4J BrebIterator在Linux上返回不正确的中文单词边界


我的应用程序需要能够检测字符串中的单词数。我正在为此使用ICU4J库,特别是BrebIterator。此代码需要适用于英语、汉语、日语和德语。我发现中文似乎在Windows上可以正常工作,但在linux上不行。在linux上它找不到分词符。我是ICU4J的新手,所以这可能是我的代码?

    public static int getWordBoundaryCount(String term, Locale locale) {
    if (term == null) {
        throw new IllegalArgumentException("term is null");
    }
    int wordBoundaryCount = 0;
    BreakIterator wb = BreakIterator.getWordInstance(locale);
    synchronized(wb) {
        wb.setText(term);
        int start = wb.first();
        for (int end = wb.next(); end != BreakIterator.DONE; start = end, end = wb.next()) {
            String tt = term.substring(start,end);
            System.out.println(tt);
            wordBoundaryCount++;
        }
    }
    return wordBoundaryCount;
}

给定字符串“丙酮”和从zh_CN创建的语言环境。在Windows上,上面的代码返回2,但在Linux它返回1。事实上,无论字符串中有多少汉字,它都返回1。它适用于Windows和Linux的英语,但它不会检测Linux上的中文单词边界。我在icu项目中发布了这个作为Jira:根据他们的说法Linux是正确的,我的测试用例都是带有多个字符的单个中文单词。他们没有解决Windows和Linux上的不同行为


共1个答案

匿名用户

根据ICU4J网站,我的测试用例都是带有多个字符的单个单词,所以Linux工作正常。他们没有评论为什么相同的代码在视窗系统上表现不同。我只需要它在Linux下表现。如果我认识更多说中文的人,我早就明白了。