Berechnung des Verhältnisses von Vokal zu Wortlänge in einer Wortliste

8

Hier ist der Code für meine Funktion:

%Vor%

Im Moment arbeite ich mit einer Liste von über 87.000 Wörtern und dieser Algorithmus ist offensichtlich extrem langsam.

Gibt es einen besseren Weg, dies zu tun?

BEARBEITEN:

Ich habe die Algorithmen @ExP getestet, die mit der folgenden Klasse geliefert wurden:

%Vor%

Die Ausgabe war (für eine Liste von 200 Wörtern):

%Vor%

Überraschenderweise waren Generator und Count sogar langsamer als das Original (bitte lassen Sie mich wissen, wenn meine Implementierung falsch war).

Ich möchte @ Johns Lösung testen, weiß aber nichts über Bäume.

    
paulwithap 22.04.2013, 20:29
quelle

6 Antworten

4

Da Sie sich nur mit dem Verhältnis von Vokalen zu Buchstaben in jedem Wort beschäftigen, könnten Sie zuerst alle Vokale durch a ersetzen. Jetzt können Sie ein paar Dinge ausprobieren, die schneller sein könnten:

  • Sie testen für jeden Schritt einen Buchstaben statt fünf. Das ist bestimmt schneller.
  • Sie können möglicherweise die gesamte Liste sortieren und nach den Punkten suchen, an denen Sie vom Vokal (jetzt kategorisiert als a ) zum Nicht-Vokal wechseln. Dies ist eine Baumstruktur. Die Anzahl der Buchstaben im Wort ist die Ebene des Baumes. Die Anzahl der Vokale ist die Anzahl der linken Zweige.
John 22.04.2013 20:48
quelle
4

Sie sollten die innerste Schleife optimieren.

Ich bin mir ziemlich sicher, dass es mehrere alternative Ansätze gibt. Hier ist, was ich im Moment herausfinden kann. Ich bin nicht sicher, wie sie in der Geschwindigkeit (in Bezug aufeinander und zu Ihrer Lösung) vergleichen werden.

  • Verwenden eines Generatorausdrucks:

    %Vor%
  • Verwenden von str.count() :

    %Vor%
  • Verwendung von str.translate() (vorausgesetzt, es gibt keine Großbuchstaben oder Sonderzeichen):

    %Vor%

Mit all diesen können Sie sogar die gesamte Funktion in einer einzigen Zeile ohne list.append() schreiben.

Ich wäre neugierig zu wissen, was sich am schnellsten herausstellt.

    
Elmar Peise 22.04.2013 20:48
quelle
1

Verwenden Sie einen regulären Ausdruck, um die Liste der Vokale zu vergleichen und die Anzahl der Übereinstimmungen zu zählen.

%Vor%     
Mark Ransom 22.04.2013 20:55
quelle
0
%Vor%

weniger Entscheidungsfindung, sollte weniger Zeit bedeuten, verwendet auch eingebaute Dinge, von denen ich glaube, dass sie schneller arbeiten.

    
TehTris 22.04.2013 20:49
quelle
0
%Vor%     
Rushy Panchal 22.04.2013 22:31
quelle
0

So berechnen Sie es mit einer Befehlszeile unter Linux: -

cat wordlist.txt | tr -d aeiouAEIOU | paste - wordlist.txt | gawk '{ FS="\t"; RATIO = length()/ length(); print , RATIO }'

Ausgabe:

%Vor%

Hinweis: Jede Zeile in wordlist.txt enthält ein Wort. Leere Zeilen erzeugen einen Fehler durch Division durch Null

    
Alvin K. 22.04.2013 23:21
quelle

Tags und Links