Ich möchte die Häufigkeit verschiedener Buchstaben in einem Text finden, und einige von ihnen verwenden diakritische Zeichen. Als Beispiel verwendet der Text sowohl "å" als auch "̊̊" (U + 00E5 U + 0328) und die Häufigkeit muss separat gezählt werden.
Wie mache ich das?
Ich habe versucht, die Counter-Sammlung zu verwenden, öffne die Datei im utf8-Format, teile die Textzeichenfolge mit text.split()
und list(text)
, aber python zählt immer noch "å" und "̊̊" als gleichen Buchstaben!
Das Problem hier ist, dass Unicode-Text (vergesse utf-8, ich spreche nach dem Decodieren deiner Daten in richtige Python 3-Strings) mehr als einen Unicode-Codepunkt für einige Zeichen verwendet: '̊̊' hat zum Beispiel zwei Marken, Während also sowohl "±" als auch "å" nach einer normalen Normalisierung als einzelnes Zeichen existieren können, muss ein Zeichen, das beide Zeichen annimmt, eines der "Kombinationszeichen" in Unicode verwenden.
Das bedeutet, dass Python Counter
alone nicht in der Lage ist, damit umzugehen, ohne mindestens einen zusätzlichen Schritt. Im Python-Code besteht die Möglichkeit, über diese Marker-Zeichen herauszufinden, dass unicodedata.category
verwendet wird - und es ist nicht so freundlich, es gibt nur eine zwei- Zeichen-ID für die Kategorie.
Also, ich denke, eine Sache, die getan werden kann, ist, Ihren Text in eine Liste vorzuverarbeiten, in der jedes Zeichen und seine Markierungen normalisiert sind, mit etwas "reinem Python" -Code. Dann könnte Counter seinen Job machen.
Es könnte etwas sein:
%Vor%(Beachten Sie, dass das obige Snippet ein potenziell fehlerhaftes Text-Snippet nicht berücksichtigt, das mit einem Markierungszeichen an Position 0 beginnen würde)
Tags und Links python unicode python-3.x