Wie kann man Buchstaben mit diakritischen Zeichen korrekt zählen?

8

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!

    
user11448 30.10.2017, 22:33
quelle

2 Antworten

7

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)

    
jsbueno 31.10.2017, 14:04
quelle
0

Sie können die Sonderzeichen durch ein anderes Zeichen ersetzen, das vor dem Zählen durch einen einzelnen Codepunkt dargestellt werden kann. Stellen Sie nur sicher, dass die Ersatzzeichen nicht im Korpus erscheinen.

%Vor%     
Håken Lid 31.10.2017 16:14
quelle

Tags und Links