如何将不使用空格的泰语句子分成单词?

Imp*_*ing 13 string parsing split nlp

如何从泰语句子中分词?英语我们可以按空格分词.

示例:I go to school,split = ['I', 'go', 'to' ,'school'] 通过仅查看空格来拆分.

但泰语没有空间,所以我不知道该怎么办.示例spitฉันจะไปโรงเรียน从txt文件到['นัน''จะ''ไป''โรง''เรียน'] =输出另一个txt文件.

是否有任何程序或库可识别泰语单词边界并分割?

mpo*_*llo 8

2006年,有人为Apache Lucene项目贡献了代码,以实现这一目标.

他们的方法(用Java编写)是使用BreakIterator类,调用getWordInstance()以获取泰语的基于字典的单词迭代器.另请注意,ICU4J项目存在明确的依赖性.我已粘贴下面代码的相关部分:

  private BreakIterator breaker = null;
  private Token thaiToken = null;

  public ThaiWordFilter(TokenStream input) {
    super(input);
    breaker = BreakIterator.getWordInstance(new Locale("th"));
  }

  public Token next() throws IOException {
    if (thaiToken != null) {
      String text = thaiToken.termText();
      int start = breaker.current();
      int end = breaker.next();
      if (end != BreakIterator.DONE) {
        return new Token(text.substring(start, end), 
            thaiToken.startOffset()+start,
            thaiToken.startOffset()+end, thaiToken.type());
      }
      thaiToken = null;
    }
    Token tk = input.next();
    if (tk == null) {
      return null;
    }
    String text = tk.termText();
    if (UnicodeBlock.of(text.charAt(0)) != UnicodeBlock.THAI) {
      return new Token(text.toLowerCase(), 
                       tk.startOffset(), 
                       tk.endOffset(), 
                       tk.type());
    }
    thaiToken = tk;
    breaker.setText(text);
    int end = breaker.next();
    if (end != BreakIterator.DONE) {
      return new Token(text.substring(0, end), 
          thaiToken.startOffset(), 
          thaiToken.startOffset()+end,
          thaiToken.type());
    }
    return null;
  }
Run Code Online (Sandbox Code Playgroud)