Ich versuche auf die einfachste Weise ein Programm zu programmieren, um Wortvorkommen in einer Datei in der Scala-Sprache zu zählen. Bisher habe ich diesen Code:
%Vor%Berücksichtige nicht den regulären Ausdruck. Ich würde gerne wissen, wie man einzelne Wörter extrahiert Sequenz in dieser Zeile abgerufen:
%Vor%, um die Häufigkeit jedes Worts zu ermitteln. Zur Zeit bekomme ich eine Karte mit gezählten Wortsequenzen.
Sie können die Dateizeilen in Wörter umwandeln, indem Sie sie mit der Regex "\W+"
teilen ( flatmap
ist faul, so dass nicht die gesamte Datei in den Speicher geladen werden muss). Zum Zählen von Vorkommen können Sie über ein Map[String, Int]
falten und es mit jedem Wort aktualisieren (viel mehr Speicher und Zeiteffizienz als mit groupBy
)
Ich denke, das Folgende ist etwas leichter zu verstehen:
%Vor% Ich bin nicht 100% sicher, was Sie fragen, aber ich denke, ich sehe das Problem. Verwenden Sie flatMap
anstelle von map
:
Dies wird alle Ihre Sequenzen miteinander verknüpfen, so dass groupBy
für einzelne Wörter anstatt für Zeilenebene verwendet wird.
Ein Hinweis zu Ihrer Regex
Ich weiß, dass du gesagt hast, dass du dir keine Gedanken über deine Regex machen musst, aber hier sind ein paar Änderungen, die du machen kannst, um es lesbarer zu machen. Hier ist, was Sie gerade haben:
%Vor%Zuerst können Sie Scala's Strings in drei Anführungszeichen verwenden, damit Sie Ihren Backslashes nicht entkommen müssen:
%Vor% Zweitens, wenn Sie das -
an den Anfang Ihrer Zeichenklasse setzen, müssen Sie nicht entkommen:
Tags und Links scala