2014-07-04 9 views
6

Wenn Sie durch die Go-Tour gehen, haben Sie den Eindruck, dass Unicode sofort unterstützt wird.Wie zähle ich japanische Wörter in Go-lang?

Das Zählen von Wörtern, die keine Standardseparatoren wie Leerzeichen speziell in Japanisch und Chinesisch verwenden, war in anderen Programmiersprachen (PHP) schmerzhaft, also neugierig, ob es möglich ist, die in japanischer Sprache geschriebenen Wörter zu zählen : katakana) mit Go-Programmiersprache.

Wenn ja, wie?

+7

Sie können Symbole zählen, aight. Aber um Wörter in Abwesenheit von Separatoren zu zählen? Ich denke nicht, dass dies eine Aufgabe einer Sprache oder ihrer Laufzeit ist. –

+0

Ich bin nicht vertraut mit Japanisch/Chinesisch, aber sie verwenden keine Art von Separator? – OneOfOne

+2

@OneOfOne gut haben sie Leerzeichen, Kommas, auch ... aber das Problem ist, ** こ れ は 私 の 名 前 で あ り, 私 は そ れ を 誇 り に 思 っ て い ま す. ** sieht aus wie zwei Worte, aber es gibt 10 Wörter es, übersetzt in etwa _This mein Name ist, und ich bin stolz auf it._ –

Antwort

1

Die Antwort ist Ja. Es ist möglich, die in japanischer Sprache geschriebenen Wörter zu zählen (zB: katakana) unter Verwendung von . " Aber zuerst müssen Sie Ihre Frage verbessern.

Jemand, der Ihre Redewendung "Standardseparatoren wie Leerzeichen" liest, könnte glauben, dass die Wortzählung eine gut definierte Operation ist. Es ist nicht, sogar für Sprachen wie Englisch. In dem Ausdruck "Test 1 2 3 Testing" stellt die Zeichenfolge "1 2 3" ein Wort oder drei oder Null dar? Ist die Antwort für "Testen von 123 Tests" anders? Wie viele Wörter sind in der Phrase "Testen testen"?

Jemand könnte auch glauben, dass die japanische Sprache ein Konzept von "Wörtern" hat, analog zu Englisch, aber mit einer anderen syntaktischen Konvention. Das ist nicht richtig - für viele Sprachen, wie Japanisch, Chinesisch und Thai.

Also müssen Sie zuerst Ihre Frage verbessern, indem Sie definieren, was "Wörter" im lateinischen Skripttext für Sprachen wie Englisch sind.

Möchten Sie eine einfache lexikalische Definition, basierend auf dem Vorhandensein von Leerzeichen? Dann überlegen Sie, Unicode TR 29 Version 4.1.0 - Text Boundaries, Section 4 Word Boundaries zu verwenden. Dies definiert "Wortgrenzen" im Hinblick auf reguläre Ausdrücke und Unicode-Zeicheneigenschaften. Die Lokalisierung Industriestandard GMX-V, Word Boundaries section verwendet TR 29.

Sobald Sie Ihre Definition haben, bin ich sicher, dass Sie der Lage, es zu implementieren sein würde mit Go-Pakete wie unicode und text/scanner. Ich habe das selbst nicht gemacht. Aus einem kurzen Blick auf die offizielle Paketliste sieht es so aus, als hätten die bestehenden Pakete keine TR 29-Implementierung. Aber Ihre Frage fragt, ob es "möglich" ist, nicht "bereits durch ein offizielles Paket implementiert".

Als nächstes, für Japanisch: Wollen Sie eine einfache lexikalische Definition von "Wort"? Wenn ja, liefert Unicode TR 29 es. Sie sagen,

Für Thai, Lao, Khmer, Myanmar und andere Skripts, die normalerweise keine Leerzeichen zwischen Wörtern verwenden, sollte eine gute Implementierung nicht von der Standard-Wortgrenze Spezifikation abhängen. Es sollte einen ausgefeilteren Mechanismus verwenden, wie es auch für Zeilenumbrüche erforderlich ist. Ideografische Schriften wie Japanisch und Chinesisch sind noch komplexer. Wenn Hangul-Text ohne Leerzeichen geschrieben wird, gilt das Gleiche. In Ermangelung eines ausgeklügelteren Mechanismus liefern die in diesem Anhang aufgeführten Regeln jedoch einen genau definierten Mangel.

Wenn Sie eine sprachlich anspruchsvolle Definition von „Wort“ im japanischen Kontext wollen, dann müssen Sie die von @Jhilke Dai, Sergio Tulentsev, und den anderen Mitwirkenden aufgeworfenen Fragen unter Berücksichtigung starten. Sie müssen Ihre Spezifikation von "Wort" entwerfen. Dann müssen Sie es implementieren. Ich bin zuversichtlich, dass Sie ab Juli 2014 keine solche Implementierung in einem offiziellen Go-Paket finden werden. Ich bin jedoch auch zuversichtlich, dass es möglich ist, wenn Sie eine klare Spezifikation entwerfen können, diese in Go zu implementieren.

Jetzt: wie viele Wörter sind in dieser Antwort gibt? Wie hast du sie gezählt?

Verwandte Themen