Как разобрать мета ключевые слова китайского языка с помощью регулярных выражений Java? - PullRequest
2 голосов
/ 03 марта 2012

У меня есть код ниже, но он выглядит неправильно для китайского. Как я могу изменить это?

ВЫВОД:

keyword:test
keyword:中
keyword:文
keyword:U
keyword:I
keyword:素
keyword:材

Должно быть ниже:

keyword:test
keyword:中文
keyword:UI
keyword:素材

Это мой код:

public class test {
  public static final Pattern KEYWORDS_REGEX =
      Pattern.compile("[^\\s,](?:[^,]+[^\\s,])?");
/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    String keywords = "test, 中文, UI, 素材";


      Matcher matcher = KEYWORDS_REGEX.matcher(keywords);

      while (matcher.find()) {
        String s = matcher.group();
        System.out.println("keyword:" +s);
      }

}

Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 марта 2012

Проблема не в китайских иероглифах, а в ключевых словах длиной в два символа.(Вот почему это также влияет на UI.) Это регулярное выражение:

[^\s,](?:[^,]+[^\s,])?

предоставляет две возможности:

[^\s,]                <-- exactly one character
[^\s,][^,]+[^\s,]     <-- three or more characters

, поэтому любые ключевые слова с двумя символами не будут совпадать, поэтомуразделить на односимвольные ключевые слова.

Вы можете исправить свое регулярное выражение, изменив [^,]+ на [^,]*, но я склонен согласиться с духом комментария Кисаро выше;Я думаю, вам лучше использовать Pattern.split:

private static final KEYWORD_SPLITTER = Pattern.compile("\\s*,\\s*");

for(final String s : KEYWORD_SPLITTER.split(keywords))
    System.out.println("keyword:" + s);
1 голос
/ 03 марта 2012

Ваше регулярное выражение должно быть \\w, чтобы соответствовать словам. Это должно генерировать желаемый результат.

Также, поскольку кто-то предложил взорваться: Apache Commons

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...