代码之家  ›  专栏  ›  技术社区  ›  Buddy Lindsey

日语/字符编程技巧[关闭]

  •  7
  • Buddy Lindsey  · 技术社区  · 16 年前

    我有一个想法,写一些网络应用程序来帮助我,也许还有其他人,更好地学习日语,因为我正在学习日语。

    我的问题是该网站将以英语为主,所以它需要混合流利的日语字符,通常是平假名和片假名,但后来是汉字。我离实现这一目标越来越近了;我发现页面和源文件必须是unicode和utf-8内容类型。

    我需要把那个动词转换成te形式。我更愿意在javascript中这样做,因为这将有助于以后进行更多的操作,但如果必须的话,我将只进行DB调用,并将所有内容保存在DB中。

    我的问题不仅仅是如何用javascript实现,还有用其他语言实现这类功能的一些技巧和策略。我希望在语言学习应用程序方面做得更多,但在这个问题上我迷失了方向。

    7 回复  |  直到 8 年前
        1
  •  26
  •   TylerH Ash Burlaczenko    8 年前
    • 在任何地方都坚持使用Unicode和utf-8。
    • 远离日本本土编码:euc jp、shiftjis、iso-2022-jp,但请注意,如果继续,您可能会在某个时候遇到它们。
    • 熟悉分词器,以完成复杂的工作,如词性分析、分词等。大多数从事日语NLP(自然语言处理)工作的人所使用的标准工具是,按流行程度/影响力排序。

    MeCab (原来在 SourceForge )非常棒:它可以让你像,

    「日本語は、とても難しいです。」

    kettle:~$ echo 日本語は、難しいです | mecab 
    日本語 名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
    は   助詞,係助詞,*,*,*,*,は,ハ,ワ
    、   記号,読点,*,*,*,*,、,、,、
    難しい 形容詞,自立,*,*,形容詞・イ段,基本形,難しい,ムズカシイ,ムズカシイ
    です  助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
    EOS

    这基本上是对词类、读物、发音等的详细分析。这也有助于分析动词时态,

    kettle:~$ echo メキシコ料理が食べたい | mecab 
    メキシコ    名詞,固有名詞,地域,国,*,*,メキシコ,メキシコ,メキシコ
    料理  名詞,サ変接続,*,*,*,*,料理,リョウリ,リョーリ
    が   助詞,格助詞,一般,*,*,*,が,ガ,ガ
    食べ  動詞,自立,*,*,一段,連用形,食べる,タベ,タベ
    たい  助動詞,*,*,*,特殊・タイ,基本形,たい,タイ,タイ
    EOS

    但是,文档都是日文的,设置和确定如何按您想要的方式格式化输出有点复杂。有ubuntu/debian可用的软件包,以及一系列语言的绑定,包括perl、python、ruby。。。

    deb http://cl.naist.jp/~eric-n/ubuntu-nlp intrepid all
    deb-src http://cl.naist.jp/~eric-n/ubuntu-nlp intrepid all

    要安装的软件包: $ apt-get install mecab-ipadic-utf8 mecab python-mecab

    我想应该这样做。

    mecab的其他替代方案有:, ChaSen ,这是几年前由MeCab的作者写的(顺便说一句,他现在在谷歌工作),以及 Kakasi ,它的威力要小得多。

    MeCab由统计驱动,并根据大量数据进行培训。它采用了一种称为 (CRFs)结果非常好。

    和日本人玩得开心。我不知道你的日语有多好,但如果你需要mecab的文档或其他方面的帮助,请随时询问。汉字在一开始可能很吓人。

        2
  •  4
  •   Michael Borgwardt    16 年前

    在javascript中,但有哪些提示 以及做这些事情的策略

    您想要做的是非常基本的字符串操作——除了缺少单词分隔符,正如Barry所指出的,尽管这不是一个技术问题。

    基本上,对于一种支持Unicode的现代编程语言(我相信JavaScript是从1.3版开始的),日语假名或汉字与拉丁字母之间没有真正的区别——它们都只是字符。一个字符串就是一个字符串。

    当您必须在字符串和字节之间进行转换时,会遇到困难,因为这样您就需要注意所使用的编码。不幸的是,许多程序员,尤其是以英语为母语的程序员,倾向于掩盖这个问题,因为ASCII实际上是拉丁字母的标准编码,而其他编码通常试图兼容。如果你只需要拉丁字母,那么你就可以愉快地不知道字符编码,相信字节和字符基本上是一样的——并且编写程序来破坏任何非ASCII的东西。

    因此,Unicode感知编程的“秘密”在于:学会识别字符串/字符在何时何地转换为字节,并确保在所有这些位置使用正确的编码,即用于反向转换的编码,以及可以对正在使用的所有字符进行编码的编码。UTF-8正在慢慢成为事实上的标准,通常应该在您有选择的地方使用。

    典型示例(非详尽):

    • 使用非ASCII字符串文字编写源代码时(在编辑器/IDE中配置编码)
    • 在向文件读取/写入字符串时(必须在API或文件元数据中的某个位置指定编码)
    • 将字符串写入数据库时(必须在数据库或表的配置中指定编码)
    • 通过Web服务器交付HTML页面时(必须在HTML标题或页面的元标题中指定编码;表单可能更复杂)
        3
  •  2
  •   soycamo    16 年前

    伪代码:

    def te_form(verb)
      switch verb.substr(-1, 1) == "る" then return # verb minus ru plus te
      case "る" #return (verb - る) + て
      case "す" #return (verb - す)+して
    

    基本上,把它分为第一类、第二类和第三类动词。

        4
  •  1
  •   Berry Tsakala    16 年前

    不过,我有一些日语方面的经验,所以我愿意付出2美分。

    由于日语文本不具有分词功能(例如空格字符),因此我们必须获得的最重要工具是基于词典的单词识别器。

    一旦分割文本,使用“普通”工具就更容易操作它。

    只有两种工具可以实现上述功能,作为副产品,它们还可以作为标记器(即名词、动词等)。

    编辑: 在使用w语言时始终使用unicode。

        5
  •  0
  •   Jimmy    16 年前

    如果我没记错的话(我在学日语的那一年放松了很多,所以我可能错了),你想做的替换是由单词中的最后一两个符号决定的。以您的第一个示例为例,任何以“”结尾的动词在以这种方式变位时都将始终具有“”。对于->§. 您是否可以建立最后一个字符的映射;共轭形式。您可能必须考虑例外情况,例如任何与xx结合的情况。

    至于语言之间的可移植性,您必须根据它们的工作方式来实现不同的逻辑。这个解决方案对于西班牙语来说也相当简单,因为变化取决于动词是否以-ar、-er或-ir结尾(有些动词在逻辑中需要例外)。不幸的是,这是我的多种语言能力的极限,所以我不知道这两种语言之外还能有多好。

        6
  •  0
  •   Amanda S    15 年前

    generateDictionaryForm(verb)
      case Ru-Verb: verb.stem + る
      case Su-Verb: verb.stem + す
      case Ku-Verb: verb.stem + く
      ...etc.
    
    generatePoliteForm(verb)
      case Ru-Verb: verb.stem + ります
      case Su-Verb: verb.stem + します
      case Ku-Verb: verb.stem + きます
      ...etc.
    

    不规则动词当然是特例。

    这种语言的某些变体适用于任何其他相当常规的语言(即,非英语)。

        7
  •  -2
  •   Tristan    9 年前

    尝试安装我的gem(rom2jap)。它是红宝石的。

    gem install rom2jap
    

    打开终端并键入:

    require 'rom2jap'