Java 将古吉拉特语单词标记为音节(古吉拉特语字符)

Java 将古吉拉特语单词标记为音节(古吉拉特语字符),java,nlp,nltk,tokenize,natural-language-processing,Java,Nlp,Nltk,Tokenize,Natural Language Processing,我试图把古吉拉特邦语(一种印度语)的单词标记成字符 例如: વાનર 是word,然后我想要一个字符列表,如[વા, ન, ર] 我用Gujaratilocale尝试了java.text.BreakIterator,但没有成功。尽管它对Hindi非常有效 以下是代码: import java.text.*; import java.util.*; public class Language{ public static void main(String[] args) {

我试图把古吉拉特邦语(一种印度语)的单词标记成字符

例如: વાનર 是word,然后我想要一个字符列表,如[વા, ન, ર]

我用
Gujarati
locale
尝试了
java.text.BreakIterator
,但没有成功。尽管它对
Hindi
非常有效

以下是代码:

import java.text.*;
import java.util.*;

public class Language{
    public static void main(String[] args) {
        String text = "વાનર";
        Locale gujarati = new Locale("gu","IN");
        BreakIterator breaker = BreakIterator.getCharacterInstance(gujarati);
        breaker.setText(text);
        int start = breaker.first();
        for (int end = breaker.next(); end != BreakIterator.DONE; start = end, end = breaker.next()) {
            System.out.println(text.substring(start,end));
        }    
    }
}
输出:

વ
ા
ન
ર
有没有哪家图书馆能做到这一点?
我对
Java

以外的语言很在行,不确定这个库是否提供了您想要的确切解决方案,但我编写了一个名为MgntUtils的库,并将其作为开放源代码发布在Maven central上,作为Maven工件提供 (请参阅)还有一个实用程序,可以将任何字符串转换为unicode序列,反之亦然。您只需执行以下操作:

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence("Hello world");
它将返回字符串
“\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064”

这同样适用于任何语言(包括特殊字符)中的任何字符串。有一种方法可以进行解码:

decodeUnicodeSequenceToString(String unicodeSequence)

这里是链接。您可以轻松地将unicode序列字符串分解为单个unicode码,并将它们像这样存储,甚至可以将它们转换为单独的字符串并获取您的字符。这是一篇文章的链接,该文章解释了库

我编写了一个小python函数,用于将
古吉拉特邦
单词转换为
音节
。我的代码是受这个Github repo的启发

代码:

def syllabify_gu(text):
        signs = [u'\u0abe',
                u'\u0abf',
                u'\u0ac0', 
                u'\u0ac1', 
                u'\u0ac2', 
                u'\u0ac3', 
                u'\u0ac4', 
                u'\u0ac5',
                u'\u0ac7', 
                u'\u0ac8', 
                u'\u0ac9',
                u'\u0acb',
                u'\u0acc',
                u'\u0a81',
                u'\u0a82',
                u'\u0a83',
                u'\u0acd'] 
        limiters = ['\"', '\'', '`', '!', ';', ', ', '?', '.']

        lst_chars = []
        for char in text:
            if char in limiters:
                lst_chars.append(char)
            elif char in signs:
                lst_chars[-1] = lst_chars[-1] + char
            else:
                try:
                    if char == u'\u0ab0' and len(lst_chars) > 0 and lst_chars[-1][-1] == u'\u0acd' and lst_chars[-1][-2] == u'\u0aa4': 
                        lst_chars[-1] = lst_chars[-1] + char
                    else:
                        lst_chars.append(char)
                except IndexError:
                    lst_chars.append(char)

        return lst_chars

syllabify_gu("સંગીત એ એવું પવિત્ર ઝરણું છે, જેનાં વહેતા તરંગોથી અંતરનાં તાર રણઝણી ઉઠે છે.")
['સં',
 'ગી',
 'ત',
 ' ',
 'એ',
 ' ',
 'એ',
 'વું',
 ' ',
 'પ',
 'વિ',
 'ત્ર',
 ' ',
 'ઝ',
 'ર',
 'ણું',
 ' ',
 'છે',
 ',',
 ' ',
 'જે',
 'નાં',
 ' ',
 'વ',
 'હે',
 'તા',
 ' ',
 'ત',
 'રં',
 'ગો',
 'થી',
 ' ',
 'અં',
 'ત',
 'ર',
 'નાં',
 ' ',
 'તા',
 'ર',
 ' ',
 'ર',
 'ણ',
 'ઝ',
 'ણી',
 ' ',
 'ઉ',
 'ઠે',
 ' ',
 'છે',
 '.']
输出:

def syllabify_gu(text):
        signs = [u'\u0abe',
                u'\u0abf',
                u'\u0ac0', 
                u'\u0ac1', 
                u'\u0ac2', 
                u'\u0ac3', 
                u'\u0ac4', 
                u'\u0ac5',
                u'\u0ac7', 
                u'\u0ac8', 
                u'\u0ac9',
                u'\u0acb',
                u'\u0acc',
                u'\u0a81',
                u'\u0a82',
                u'\u0a83',
                u'\u0acd'] 
        limiters = ['\"', '\'', '`', '!', ';', ', ', '?', '.']

        lst_chars = []
        for char in text:
            if char in limiters:
                lst_chars.append(char)
            elif char in signs:
                lst_chars[-1] = lst_chars[-1] + char
            else:
                try:
                    if char == u'\u0ab0' and len(lst_chars) > 0 and lst_chars[-1][-1] == u'\u0acd' and lst_chars[-1][-2] == u'\u0aa4': 
                        lst_chars[-1] = lst_chars[-1] + char
                    else:
                        lst_chars.append(char)
                except IndexError:
                    lst_chars.append(char)

        return lst_chars

syllabify_gu("સંગીત એ એવું પવિત્ર ઝરણું છે, જેનાં વહેતા તરંગોથી અંતરનાં તાર રણઝણી ઉઠે છે.")
['સં',
 'ગી',
 'ત',
 ' ',
 'એ',
 ' ',
 'એ',
 'વું',
 ' ',
 'પ',
 'વિ',
 'ત્ર',
 ' ',
 'ઝ',
 'ર',
 'ણું',
 ' ',
 'છે',
 ',',
 ' ',
 'જે',
 'નાં',
 ' ',
 'વ',
 'હે',
 'તા',
 ' ',
 'ત',
 'રં',
 'ગો',
 'થી',
 ' ',
 'અં',
 'ત',
 'ર',
 'નાં',
 ' ',
 'તા',
 'ર',
 ' ',
 'ર',
 'ણ',
 'ઝ',
 'ણી',
 ' ',
 'ઉ',
 'ઠે',
 ' ',
 'છે',
 '.']

查找古吉拉特邦字符的Unicode。

我从未尝试过使用这些特殊字符,但它不是以基本方式工作的吗,使用
String\charAt(int-index)
?@jhamon我猜这不起作用,字符串的长度为4,这将导致相同的输出。预期输出的示例与实际代码和输出不同。另外,我不知道古吉拉特语。你能解释一下当前输出的错误吗?@jhamon..我更正了示例。我希望输出为[વા, ન, ર] (大小为3的列表),代码给出的输出为[વ, ા, ન, ર] (列表大小为4)。转换为Unicode将不起作用વાનર 古吉拉特语转换成4个Unicode字符,但实际上是3个字符或音节。我不懂古吉拉特语,但我看到的符号是વ' 而且ા' 是两个不同的字母。如果它们的组合产生一个音节,我不知道(但我相信你知道)但就编码而言,它们是两个不同的字符:代码“\u0ab5”\u0abe”。因此,您在代码中得到的结果是正确的,可以将字符串拆分为单独的字母。对于所需的结果,应该有一些特定于语言的支持,或者您需要搜索来自语言的立场是一个单一的音节,并把他们作为一个我正在寻找语言的具体支持只。