Struktura danych - wystąpienia słów

0

Witam,

Zastanawiam się jaka jest najbardziej wydajna struktura, która służyłaby do przechowywania ilości występień słów (powiedzmy z jakiegoś dłuższego fragmentu tekstu).

Czego oczekuję w końcowym efekcie? znaleźć x najczęściej lub najrzadziej występujących słów.

Zastanawia mnie na ile wydajne byłoby najprostsze rozwiązanie (map<string,int>) lub jakaś prosta struktura w stylu:

struct Node
{
  bool terminator;
  int count;
  Node* children['Z'-'A'+1];
};

Jakie byłoby najlepsze rozwiązanie dla pełnego zestawu znaków Unicode?
Jakie rozwiązanie użyć gdybym często chciał sprawdzać statystyki, a jakie kiedy powiedzmy tylko raz na końcu?

Są może jakieś gotowce?

Ostatnio denerwuje mnie co chwile zerkanie do słownika i zastanawiam się nad napisaniem programu, który posłużyłby np. w nauce języka. Wrzucam do programu kilka książek lub np. napisy do filmu i znajduję najczęściej występujące słowa, dzięki czemu wiem jakich słów powinienem się uczyć przed przeczytaniem jakiejś książki lub obejrzeniem filmu w danym języku. Można by później rozbudować program i zrobić dzięki temu lepszą wersję super memo, która by miała na celu końcowo przeczytanie czegoś ze zrozumieniem.

PS. Temat wrzuciłem do C++, bo w tym języku chciałem pisać, ale równie dobrze mógłby być w algorytmach i strukturach danych

0

W c++? Użyj unordered_map albo ewentualnie map.
Gotowce? Przecież taki program to jest raptem kilka linijek... Czytasz wejście, tokenizujesz tekst na słowa regexpem i robisz mapa[slowo]++;
Wydaje mi się że lepiej użyć języka takiego jak python, albo przynajmniej Java/C#.

0

wiem, że kilka linijek, ale zastanawiałem się nad czymś co by działało jak google bot i parsowało ogromne ilości tekstów, ale w sumie tych słów to aż tak dużo nie ma :)

0

Zdefiniuj ogromne ilości ;) Patrząc na statystykę która robiłem na ostatnie zajecia z przetwarzania języka naturalnego to sparsowanie pierwszego tomu Potopu i policzenie ile razy jakie słowo wystąpiło zajęło ~sekundę (ale to jest raptem 3MB plain text) i wyszło z tego trochę ponad 45k słów (różne formy były liczone jako różne słowa!)

1 użytkowników online, w tym zalogowanych: 0, gości: 1