Frage

Ich habe eine Idee für ein paar web-apps zu schreiben, um mir zu helfen, und vielleicht andere, Japanisch lernen besser, da ich studiere die Sprache.

Mein problem ist das der Ort sein wird, in der meist englischen, so muss es zu mischen, fließend, japanische Zeichen, in der Regel hirigana und katakana, aber später kanji.Ich bin immer näher, um dies zu erreichen;Ich habe herausgefunden, dass die Seiten-und source-Dateien müssen werden unicode-und utf-8 content-Typen.

Aber mein problem kommt in die eigentliche Codierung.Was ich brauche, ist zum Bearbeiten von Zeichenketten werden kana.Ein Beispiel ist:

けす ich, dass verb und konvertieren Sie es in der te-form けして.Ich würde es vorziehen, dies in javascript, wie es wird helfen, die Straße hinunter, mehr zu tun, manipulation, aber wenn ich nur auf DB-Aufrufe und halten alles in einer DB.

Meine Frage ist nicht nur, wie man es in javascript, aber was sind einige Tipps und Strategien, um diese Art von Dingen in anderen Sprachen auch.Ich bin der Hoffnung, um mehr zu tun Sprache Lern-apps, aber ich bin verloren, wenn es dazu kommt.

War es hilfreich?

Lösung

  

Meine Frage ist nicht nur, wie es zu tun   in Javascript, aber was sind einige Tipps   und Strategien, um diese Arten zu tun   die Dinge in anderem langauges zu.

Was Sie tun möchten, ist ziemlich einfach String manipution -. Abgesehen von den fehlenden Worttrennzeichen, wie Barry stellt fest, obwohl das kein technisches Problem

Im Grunde genommen für eine moderne Unicode-fähige Programmiersprache (die JavaScript seit Version waren 1.3, glaube ich) gibt es keinen wirklichen Unterschied zwischen einem japanischen Kana oder Kanji und einem lateinischen Buchstaben - sie alle nur Zeichen sind. Und ein String ist nur, na ja, eine Zeichenfolge.

Wenn es schwierig wird, wenn man zwischen Strings und Bytes konvertieren, denn dann müssen Sie darauf achten, was codiert, die Sie verwenden. Leider neigen viele Programmierer, vor allem englischer Muttersprachler, dieses Problem zu beschönigen, weil ASCII die de-facto-Standard-Codierung für lateinische Buchstaben und andere Codierungen in der Regel versuchen, ist kompatibel zu sein. Wenn lateinische Buchstaben sind alles, was Sie brauchen, dann können Sie zusammen zu sein völlig ahnungslos über Zeichencodierungen erhalten, glauben, dass Bytes und Zeichen im Grunde das Gleiche sind -. Und Programme schreiben, die etwas zu verstümmeln, die nicht ASCII ist

So ist das „Geheimnis“ von Unicode-aware Programmierung ist dies: lernen zu erkennen, wann und wo Strings / Zeichen umgewandelt werden und von Bytes, und vergewissern Sie sich, dass in allen diesen Orten die richtige Codierung verwendet wird, dh die gleichen, die wird für die Rückumwandlung und eine verwendet werden, die alle den Charakter des kodieren, können Sie verwenden. UTF-8 ist langsam der de-facto-Standard zu werden und soll in der Regel eingesetzt werden, wo Sie die Wahl haben.

Typische Beispiele (ohne Anspruch auf Vollständigkeit):

  • Beim Schreiben von Quellcode mit Nicht-ASCII-Zeichenkette (konfigurieren Codierung im Editor / IDE)
  • Wenn ein solcher Quellcode kompilieren oder zu interpretieren (Compiler / Interpreter muss die Codierung wissen)
  • Beim Lesen / Strings Schreiben in eine Datei
  • (Codierung muss irgendwo in der API, oder in den Metadaten der Datei angegeben werden)
  • Wenn Strings in eine Datenbank zu schreiben (Codierung muss in der Konfiguration des DB oder die Tabelle angegeben werden)
  • Wenn HTML liefern Seiten über einen Web-Server (Codierung in den HTML-Header angegeben werden muss oder die Meta-Header Seiten, Formulare können auch komplizierter sein)

Andere Tipps

  • Stick zu Unicode und utf-8 überall.
  • Bleiben Sie Weg von der einheimischen japanischen Kodierungen:euc-jp, shiftjis, iso-2022-jp, aber beachten Sie, dass Sie wahrscheinlich stoßen Sie an einem gewissen Punkt, wenn Sie fortfahren.
  • Holen Sie sich vertraut mit segmenter für tun komplizierte Sachen wie POS Analyse, Wort-Segmentierung, etc.die standard-Werkzeuge verwendet durch die meisten Menschen, die NLP (natural language processing) arbeiten auf Japanisch sind, in der Reihenfolge der Popularität/power.

MeCab (ursprünglich auf SourceForge) ist genial:es ermöglicht Ihnen, nehmen Sie text wie,

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

und Holen Sie sich alle Arten von großen info zurück

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

das ist im Grunde eine detaillierte run-down of parts-of-speech, Lesungen, Aussprache, etc.Es wird auch Sie die Gunst der Analyse der Zeitformen,

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

Aber die Dokumentation ist alles auf Japanisch, und es ist ein bisschen kompliziert einzurichten und herauszufinden, wie Sie um die Ausgabe zu formatieren, wie Sie es wollen.Dort gibt es Pakete für ubuntu/debian und Bindungen in eine Reihe von Sprachen wie perl, python, ruby...

Apt-repos für ubuntu:

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

Pakete zu installieren:$ apt-get install mecab-ipadic-utf8 mecab python-mecab

sollte den trick tun, denke ich.

Die andere alternativen zu mecab sind, ChaSen, das geschrieben wurde vor Jahren durch den Autor MeCab (wer übrigens funktioniert bei google jetzt), und Kakasi, die ist viel weniger leistungsfähig.

Ich würde auf jeden Fall versuchen zu vermeiden, Ihre eigenen Rollen Konjugation Routinen.das problem dabei ist nur, dass Sie es erfordern werden Tonnen und Tonnen von Arbeit, die andere schon gemacht haben, und für alle die edge-Fällen, die mit Vorschriften ist, am Ende des Tages, unmöglich.

MeCab ist statistisch getrieben und trainiert Lasten von Daten.Es verwendet ein hoch entwickeltes machine-learning-Technik namens conditional random fields (CRFs) und die Ergebnisse sind wirklich sehr gut.

Haben Sie Spaß mit dem japanischen.Ich bin mir nicht sicher, wie gut Ihr Japanisch ist, aber wenn Sie Hilfe benötigen mit die docs für mecab oder was auch immer fühlen Sie sich frei zu Fragen, über, dass, wie gut.Kanji kann ziemlich einschüchternd, am Anfang.

Was Sie tun müssen, ist an den Regeln der Grammatik zu suchen. Haben eine Reihe von Regeln für jede Konjugation. Nehmen wir ~ て Form zum Beispiel. Psudocode:

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

usw. Grundsätzlich brechen sie in Typ I, II und III Verben.

Ihre Frage ist völlig unklar zu mir.

aber ich hatte einige Erfahrung mit japanischer Sprache arbeiten, also wird ich meine 2 Cents geben.

da japanische Texte nicht Worttrennung verfügen (beispielsweise Leerzeichen), das wichtigste Werkzeug, das wir ein Wörterbuch-basierte Worterkennungs erwerben musste.

, wenn Sie den Text Split bekommen, ist es einfacher, sie zu manipulieren mit „normalen“ Werkzeugen.

gibt es nur zwei Werkzeuge, die die oben taten, und als ein Nebenprodukt sie auch als Tagger gearbeitet (das heißt Substantiv, Verb, usw.).

edit: immer Unicode verwenden, wenn w languagers arbeiten.

Wenn ich mich richtig erinnere (und ich nachgelassen viel die Jahre an den I Japaner nahmen, so konnte ich falsch sein), die Ersetzungen Sie tun möchten, werden durch das letzte Symbol oder zwei in dem Wort bestimmt. Ihr erstes Beispiel jede Verb Endung ‚す‘ wird immer ‚し て‘, wenn auf diese Weise konjugiert. Ähnliches gilt für む -> ん で. > Konjugierte Form - Könnten Sie vielleicht eine Abbildung letzte Zeichen (n) herzustellen. Sie könnten für Ausnahmen zu berücksichtigen haben, wie alles, was Konjugate xx っ て.

Wie für die Portabilität zwischen den Sprachen, werden Sie die Logik unterschiedlich je nachdem, wie sie arbeiten, implementieren müssen. Diese Lösung wäre relativ einfach sein, als auch für Spanisch zu implementieren, da die Konjugationen hängt davon ab, ob das Verb endet in -ar, -er oder -ir (mit einigen Ausnahmen Verben in Ihrer Logik erforderlich). Leider, das ist die Grenze meiner mehrsprachigen Fähigkeiten, damit ich weiß nicht, wie gut es wäre über diese beiden zu tun.

Da die meisten Verben in der japanischen eines von einer kleinen Gruppe von vorhersagbaren Mustern folgen, die einfachste und erweiterbare Möglichkeit, alle Formen eines gegebenen Verbs zu erzeugen, ist das Verb wissen zu lassen, was Konjugation folgen soll, dann Funktionen schreiben zu erzeugen jede Form je nach der Konjugation.

Pseudocode:

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.

Unregelmäßige Verben wäre natürlich besondere Gefasste.

Einige Varianten davon wären für jede andere ziemlich regelmäßige Sprache arbeiten (das heißt nicht Englisch).

Versuchen Sie, meine Perle (rom2jap) zu installieren. Es ist in Ruby.

gem install rom2jap

Öffnen Sie Terminal und geben Sie:

require 'rom2jap'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top