【问题标题】:Tokenize words into syllables (gujarati characters) for Gujarati将单词标记为古吉拉特语的音节(古吉拉特语字符)
【发布时间】:2019-01-24 10:40:45
【问题描述】:

我正在尝试将 GujaratiIndian 语言)单词标记为字符。

示例: વાનર 是单词,然后我想要 [વા, ન, ર] 等字符列表

我尝试了java.text.BreakIteratorGujarati locale,但没有成功。虽然它非常适合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以外的其他语言都很好

【问题讨论】:

  • 我从未尝试过使用这些特殊字符,但它不会以基本方式工作,使用String#charAt(int index)
  • @jhamon 我猜这不起作用,字符串的长度为 4,这将导致相同的输出
  • 具有预期输出的示例与实际代码和输出不同。另外我不认识古吉拉特语。你能解释一下当前输出有什么问题吗?
  • @jhamon .. 我更正了示例。我期望输出为 [વા, ન, ર](大小为 3 的列表),代码给出的输出是 [વ, ા, ન, ર](大小为 4 的列表)。

标签: java nlp nltk tokenize natural-language-processing


【解决方案1】:

不确定该库是否提供了您想要的确切解决方案,但我编写了一个名为 MgntUtils 的库并将其作为开源发布,可作为 Maven 中心上的 Maven 工件使用 (请参阅here)以及github 那里有一个实用程序可以将任何字符串转换为 unicode 序列,反之亦然。您所要做的就是:

String codes = StringUnicodeEncoderDecoder.encodeStringToUnicodeSequence("Hello world");

它会返回字符串"\u0048\u0065\u006c\u006c\u006f\u0020\u0057\u006f\u0072\u006c\u0064"

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

decodeUnicodeSequenceToString(String unicodeSequence)

这是javadoc 链接。您可以轻松地将 unicode 序列字符串分解为单个 unicode 并像这样存储它们,甚至可以将它们转换回单独的字符串并获取您的字符。这是文章Open Source Java library with stack trace filtering, Silent String parsing Unicode converter and Version comparison 的链接,该文章解释了该库

【讨论】:

  • 转换为 Unicode 不起作用,因为古吉拉特语中的 વાનર 被转换为 4 个 Unicode 字符,但实际上它是古吉拉特语中的 3 个字符或音节。
  • 我不懂古吉拉特语,但我看到符号“વ”和“ા”是两个不同的字母。如果它们的组合创建了一个我不知道的音节(但我相信你知道),但就编码而言,它们是两个不同的字符:代码 '\u0ab5' '\u0abe'。因此,就将字符串拆分为单独的字母而言,您在代码中得到的结果是正确的。至于您想要的结果,要么应该有一些特定于语言的支持,要么您需要搜索从语言角度来看是单个音节的字母组合并将它们视为一个音节
  • 我只寻找特定语言的支持。
【解决方案2】:

我编写了一个小 Python 函数来将 Gujarati 单词转换为 Syllables 的列表。我的代码受到这个 Github repo libindic/syllabalizer 的启发。

代码:

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 here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-23
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    相关资源
    最近更新 更多