Ruby, Zähle Silben

8

Ich verwende Ruby, um den Gunning Fog Index eines Inhalts zu berechnen, den ich habe. Ich kann den hier beschriebenen Algorithmus erfolgreich implementieren:

Gunning Fog Index

Ich verwende die folgende Methode, um die Anzahl der Silben in jedem Wort zu zählen:

%Vor%

Es nimmt manchmal Wörter mit nur 2 Silben als 3 Silben auf. Kann jemand einen Rat geben oder kennt eine bessere Methode?

%Vor%

"selbst" wird als 3 gezählt, aber es sind nur 2

    
RailsSon 13.08.2009, 13:23
quelle

4 Antworten

11

Die Funktion, die ich Ihnen zuvor gegeben habe, basiert auf diesen einfachen Regeln, die hier skizziert sind:

  

Jeder Vokal (a, e, ich, o, u, y) in a   Wort zählt als eine Silbe   die folgenden Unterregeln:

     
  • Ignoriere End-ES, -ED, -E (außer   für -LE)
  •   
  • Wörter mit drei Buchstaben oder   weniger zählen als eine Silbe
  •   
  • Aufeinanderfolgende Vokale zählen als eins   Silbe.
  •   

Hier ist der Code:

%Vor%

Natürlich ist das auch nicht perfekt, aber alles, was du jemals mit so etwas bekommen wirst, ist eine Heuristik.

BEARBEITEN:

Ich habe den Code leicht geändert, um mit einem führenden 'y' umzugehen, und die Regex korrigiert, um besser mit 'les' Endungen umgehen zu können (wie in "Kerzen").

Hier ist ein Vergleich mit dem Text in der Frage:

%Vor%

Die Ausgabe ist:

%Vor%

Es scheint also eine Verbesserung zu sein.

    
Pesto 13.08.2009, 13:47
quelle
4

Eine Sache, die Sie tun sollten, ist Ihren Algorithmus über diphthongs zu unterrichten . Wenn ich Ihren Code richtig lese, würde es "Hilfe" fälschlicherweise als zwei Silben kennzeichnen.

Sie können auch "es" und ähnliches zu Ihren Sonderfällen hinzufügen (Sie haben bereits "ing") und zählen sie nicht einfach als eine Silbe, aber das könnte immer noch zu Fehlzählungen führen.

Schließlich sollten Sie für beste Genauigkeit Ihre Eingabe in ein Rechtschreibschema oder ein Alphabet umwandeln, das eine eindeutige Beziehung zur Aussprache des Wortes hat. Mit Ihrem "sich selbst" -Beispiel hat der Algorithmus keine zuverlässige Möglichkeit zu wissen, dass das "e" "ves" gelöscht wird. Allerdings, wenn Sie es als "themselvz", oder lehrte den Algorithmus die IPA und fütterte es [ðəmsɛlvz], es wird sehr deutlich, dass das Wort nur mit zwei Silben ausgesprochen wird. Das setzt natürlich voraus, dass Sie die Kontrolle über die Eingabe haben und wahrscheinlich mehr Arbeit haben, als nur die Silben selbst zu zählen.

    
Cody Brimhall 13.08.2009 17:43
quelle
1

Zunächst scheint es, dass Sie len für die Suffixe dekrementieren sollten, die ausgeschlossen werden sollten.

%Vor%

Sie können auch Lingua :: EN :: Readability lesen.

  

Es kann auch mehrere Lesbarkeitsmessungen berechnen, wie zum Beispiel einen Nebelindex und eine Flesch-Kincaid-Ebene.

PS. Ich denke ich weiß wo du die Funktion von bekommen hast. DS.

    
Jonas Elfström 13.08.2009 13:43
quelle
0

Es gibt auch einen Rubygem namens Odyssey , der Gunning Fog zusammen mit einigen anderen beliebten (Flesch-Kincaid, SMOG usw.)

    
C. Louis S. 17.05.2013 18:16
quelle

Tags und Links