質問

私は言語を勉強しているので、私を助けるためにいくつかのWebアプリを書くアイデアがあります。

私の問題は、サイトの大部分が英語であるため、通常はひらがなとカタカナですが、後に漢字を流に入力する必要があることです。私はこれを達成することに近づいています。ページとソースファイルはUnicodeおよびutf-8コンテンツタイプである必要があることがわかりました。

しかし、私の問題は実際のコーディングにあります。必要なのは、かな文字列を操作することです。一例:

けすその動詞を取り、te-formけしてに変換する必要があります。より多くの操作を行うために道を助けるので、私はjavascriptでこれを行うことを好むでしょうが、私がしなければならない場合はDB呼び出しを行い、DB内のすべてを保持します。

私の質問は、javascriptでそれを行う方法だけでなく、他の言語でこれらの種類のことを行うためのヒントと戦略もあります。私は言語学習アプリをもっとやってみたいと思っていますが、これに関しては迷っています。

役に立ちましたか?

解決

  

私の質問は、それを行う方法だけではありません   javascriptではなく、いくつかのヒントは何ですか   これらの種類を行うための戦略   他の言語にもあります。

やりたいことは、かなり基本的な文字列の操作です。バリーが指摘しているように、欠落している単語区切り文字は別ですが、それは技術的な問題ではありません。

基本的に、現代のユニコード対応プログラミング言語(JavaScriptはバージョン1.3以降です)では、日本語の仮名または漢字とラテン文字の間に実際の違いはありません-それらはすべて単なる文字です。そして、文字列はただの文字列です。

難しいのは、使用しているエンコーディングに注意を払う必要があるため、文字列とバイトを変換する必要がある場合です。残念ながら、多くのプログラマー、特にネイティブの英語スピーカーは、ASCIIがラテン文字のデファクトスタンダードエンコーディングであり、他のエンコーディングは通常互換性を保とうとするため、この問題を解決する傾向があります。必要なのがラテン文字だけであれば、文字エンコーディングについて無頓着になり、バイトと文字は基本的に同じものであると信じ、ASCII以外のものを切断するプログラムを作成できます。

したがって、「秘密」はUnicode対応のプログラミングの例は次のとおりです。文字列/文字がバイトとの間でいつどこで変換されるかを認識し、すべての場所で正しいエンコードが使用されることを確認します。使用しているすべてのキャラクターをエンコードできるもの。 UTF-8は徐々に事実上の標準になりつつあり、通常は選択肢がある場合は常に使用する必要があります。

典型的な例(網羅的ではない):

  • 非ASCII文字列リテラルを使用してソースコードを記述する場合(エディター/ IDEでエンコードを構成する)
  • このようなソースコードをコンパイルまたは解釈する場合(コンパイラ/インタープリターはエンコーディングを知る必要があります)
  • ファイルへの文字列の読み取り/書き込み時(エンコードはAPIまたはファイルのメタデータのどこかで指定する必要があります)
  • データベースに文字列を書き込む場合(エンコードはDBまたはテーブルの構成で指定する必要があります)
  • HTMLページをWebサーバー経由で配信する場合(エンコードはHTMLヘッダーまたはページのメタヘッダーで指定する必要があります。フォームはさらに複雑になる可能性があります)

他のヒント

  • どこでもUnicodeとutf-8にこだわります。
  • 日本語のネイティブエンコーディングであるeuc-jp、shiftjis、iso-2022-jpは避けてください。ただし、続行すると、おそらくそれらに遭遇することに注意してください。
  • POS分析、単語分割などの複雑な処理を行うセグメンターに慣れるli>

MeCab (元々は SourceForge )は素晴らしいです。次のようなテキストを取得できます。

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

そしてあらゆる種類の素晴らしい情報を取得

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

これは基本的に、品詞、読み、発音などの詳細な要約です。また、動詞の時制を分析することにも役立ちます

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

ただし、ドキュメントはすべて日本語であるため、出力を希望どおりにフォーマットする方法をセットアップして理解するのは少し複雑です。 ubuntu / debianで利用可能なパッケージと、perl、python、rubyなどの言語の束でのバインディングがあります。

ubuntuのapt-repos:

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(ついにgoogleで今働いている)の著者、および Kakasi は、それほど強力ではありません。

私は間違いなく、あなた自身の活用ルーチンを動かさないようにします。これに関する問題は、他の人がすでに行っている膨大な作業を必要とすることであり、すべてのエッジケースをルールでカバーすることは、結局のところ不可能です。

MeCabは統計的に駆動され、データの負荷についてトレーニングされます。 条件付きランダムフィールド(CRF)と呼ばれる高度な機械学習手法を採用しており、結果は非常に優れています。

日本人を楽しもう。あなたの日本語がどれだけ上手かはわかりませんが、mecabのドキュメントやその他の質問があれば、気軽に質問してください。漢字は最初は非常に怖いかもしれません。

あなたがする必要があるのは、文法の規則を見ることです。活用ごとに一連のルールを用意します。とりましょう〜て例えばフォーム。 擬似コード:

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

など基本的に、タイプI、II、IIIの動詞に分けます。

あなたの質問は私には全く分かりません。

ただし、日本語の使用経験があったので、2セントを差し上げます。

日本語のテキストには単語の区切り(スペース文字など)が含まれていないため、取得する必要があった最も重要なツールは、辞書ベースの単語認識ツールです。

テキストが分割されたら、「通常」で簡単に操作できます。ツール。

上記を行うツールは2つしかなく、副産物としてタガーとしても機能しました(つまり、名詞、動詞など)。

編集: 言語を扱う場合は常にユニコードを使用します。

正しく覚えている場合(そして日本語を間違えたために日本語をたくさん取った)、あなたがやりたい置換は、単語の最後の記号または2つによって決定されます。最初の例として、「す」で終わる動詞常に「して」になりますこのように共役すると。同様にむ -> んで。最後の文字のマッピングを確立できますか->共役型。 xxってと共役するものなど、例外を考慮する必要がある場合があります。

言語間の移植性については、動作方法に基づいて異なる方法でロジックを実装する必要があります。この解決策は、動詞が-ar、-er、または-ir(ロジックで例外を必要とする一部の動詞)で終わるかどうかに依存するため、スペイン語にも実装するのはかなり簡単です。残念ながら、それは私の多言語スキルの限界なので、これら2つを超えてどれだけうまくいくかわかりません。

日本語のほとんどの動詞は予測可能なパターンの小さなセットのいずれかに従うため、特定の動詞のすべての形式を生成する最も簡単で最も拡張可能な方法は、動詞にどのような活用が必要かを認識させ、生成する関数を記述することです結合に応じて各フォーム。

擬似コード:

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.

不規則な動詞はもちろん特殊なケースになります。

これのいくつかの変形は、他のかなり通常の言語(つまり、英語ではない)で機能します。

gem(rom2jap)をインストールしてみてください。ルビーです。

gem install rom2jap

ターミナルを開き、次を入力します:

require 'rom2jap'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top