Was sind all die japanischen whitespace-Zeichen?
Muss ich aufteilen einer Zeichenfolge extrahieren und Wörter getrennt durch Leerzeichen.Die Quelle kann in Englisch oder Japanisch. Englisch whitespace-Zeichen sind tab und space, und der japanische text verwendet, auch diese. (Wenn ich mich Recht erinnere, in allen gängigen japanischen Zeichensätze sind Obermengen von US-ASCII.)
Also die Menge der Zeichen, die ich brauche, zu verwenden, um split-mein string enthält normale ASCII-Leerzeichen und tab.
Aber im japanischen gibt es ein weiteres Leerzeichen, die gemeinhin als ein "full-width space". Laut meinem Mac ist Charakter-Viewer-Dienstprogramm, das ist U+3000 "IDEOGRAPHIC SPACE". Dies ist (normalerweise) was ergibt sich, wenn ein Benutzer drückt die Leertaste, während Sie Tippen in der japanischen Eingabe-Modus.
Gibt es irgendwelche andere Zeichen, die ich beachten muss?
Ich bin der Verarbeitung von textuellen Daten, die von Benutzern gesendet, die haben gesagt, daß Sie "separate Einträge mit Leerzeichen". Allerdings werden die Benutzer mit einer Vielzahl von computer-und Handy-Betriebssysteme zu behaupten, dass diese Texte. Wir haben bereits gesehen, dass die Benutzer möglicherweise nicht bewusst, ob Sie in Englisch oder Japanisch-input-Modus bei der Eingabe dieser Daten.
Darüber hinaus das Verhalten der space-Taste unterscheidet sich zwischen Plattformen und Anwendungen auch in der japanischen mode (z.B. Windows 7 legen Sie eine ideografische Raum, sondern iOS fügt ein ASCII-Leerzeichen).
Also was ich will ist im Grunde "die Menge aller Zeichen, die optisch Aussehen wie ein Raum, und generiert werden könnten, wenn der Benutzer drückt die Leertaste oder die tab-Taste, da viele Nutzer nicht wissen, den Unterschied zwischen einem Leerzeichen und einem tab, in Japanisch und/oder Englisch".
Gibt es eine verlässliche Antwort auf eine solche Frage?
- Sollte nicht jeder Programmiersprache mit der richtigen Unicode-Unterstützung nur lassen Sie split ein string (mit regex) auf Leerzeichen? Zum Beispiel -
/\s/
entspricht whitespace-Zeichen in JavaScript (entspricht[ \f\n\r\t\v\u00A0\u2028\u2029]
). - Matt: Der regex, den du zitiert hast ist schon fehlende
\u3000
und die OP ist, Fragen, was sonst vielleicht fehlen. Die Unicode-Trennzeichen-space-Liste hat 18 Einträge: fileformat.info/info/unicode/category/Zs/list.htm - Matt: Yeah, ich wünschte, aber die Vorstellung, dass JavaScript (und überraschend, selbst Ruby) hat über das, was ist generic 'whitespace' nicht enthalten Japanisch whitespace-character(s?). Frank: danke für diesen link, stochern manuell in meinem Unicode-viewer musste ich stolperte über EM RAUM, BILD RAUM und Freunden, aber hatte nicht auf OGHAM RAUM DANEBEN oder MONGOLIAN VOWEL SEPARATOR...
- Ist diese in voller Breite ein Leerzeichen verwendet für die tokenisierung japanischen text? Wenn nicht, dann wie in der Welt tun Sie tokenisierung japanischen text?
- FWIW, ich habe gesehen
\uFFE3
(überstrichen) als ein full-width-Raum als auch (in der freien Wildbahn, auf der japanischen web). - Japanischen text fast nie whitespace-Zeichen (außer Zeilenumbrüchen). Tokenization und-Analyse wird durchgeführt unter Verwendung von machine learning-Methoden wie conditional random fields (CRF), trainiert mit Daten versehen wurde, mit part-of-speech-Informationen.
- tokenisierung japanische text ist schwer. Ja, Sie haben einen Punkt (full stop) Art der Zeichensetzung jedoch ist es eher verwendet, um mehrere Sätze, formulieren eine Idee (denken Absatz). AFAIK werden die Wörter in der Regel mit Token mit einer Trie-Datenstruktur, oder etwas ähnliches, aber Sie haben zu berücksichtigen, den Kontext des Satzes richtig zu erkennen, das eigentliche Wort wird in Token aufgeteilt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die ASCII-tab, Leerzeichen und ein geschütztes Leerzeichen (U+geschützte Leerzeichen 00A0), und die full-width space, das haben Sie richtig erkannt U+3000. Sie könnten möglicherweise wollen mit Zeilenumbruch und vertikale Leerzeichen. Wenn Sie Ihre Eingabe in unicode (nicht Shift-JIS, etc.) dann ist das alles, was Sie brauchen. Es gibt andere (Kontroll -) Zeichen wie \0 NULL, die manchmal verwendet werden, wie Informationen Trennzeichen, aber Sie werden nicht gerendert, als ein Raum, in ostasiatischen text - D. H., Sie erscheinen nicht als Leerzeichen.
edit: Matt Ball hat einen guten Punkt in seinem Kommentar, aber, wie sein Beispiel zeigt, viele regex-Implementierungen nicht gut umgehen mit voller Breite zu Ost-asiatischen Satzzeichen. In diesem Zusammenhang ist es erwähnenswert, dass Python ' s
string.whitespace
nicht schneiden den Senf entweder.Ich habe gerade dein posting. Dies ist eine großartige Erklärung über die Normalisierung von Unicode-Zeichen.
http://en.wikipedia.org/wiki/Unicode_equivalence
Fand ich, dass viele Programmier-Sprachen, wie Python, müssen Module, die Umsetzung dieser Normalisierung Regeln des Unicode-standards. Für meine Zwecke fand ich das folgende python-code sehr gut funktioniert. Es konvertiert alle unicode-Varianten von Leerzeichen den ascii-Bereich. Nach der Normalisierung, einen regex-Befehl umwandeln kann alle Leerzeichen in ascii \x32:
Seit dem ersten schreiben, ich lernte Python ' s regex (re) Modul unsachgemäß itentifies diese whitespace-Zeichen und kann einen Absturz verursachen, wenn Sie Ihr begegnen. Es stellt sich heraus, eine schnellere und zuverlässigere Methode verwendet .split () - Funktion.