Najszybszy sposób przeszukiwania pliku tekstowego.

0

Mam plik tekstowy składający się z 13 mln słów, jaka jest najszybsza metoda przeszukiwania tego dokumentu tych 13 mln słów, tak abym w jak najkrótszym czasie otrzymywał wynik zapytania czy słowo istnieje i w której linii.

0

nie to nie jest słownik, i nie są ułożone alfabetycznie.

0

posortować, zamienić płaski plik na drzewo, wcisnąć do bazy

0

Jeżeli nie jest posortowane to nie istnieje metoda szybsza niż sprawdzanie słów po kolei, jęsli jest posortowane to możesz szukać tak jak w książce telefonicznej. Możesz zawsze zrobić swoją wersję - posortowaną. Albo ładować do pamięci i wtedy sortować, ale nie widzę sensu robienia z tego drzewa, ja bym użył posortowanej tablicy.

0
  1. Podziel plik na 26 plików - każdy zawierający początkowe litery alfabetu: A.ini, B.ini ... Z.ini
  2. Każdy plik z pierwszą literą alfabetu, podziel na kolejne pliki o konkretnej długości: A1.ini, A2.ini ... A25.ini

Szukasz słowa: test
Wiesz, że pierwsza litera to T i jest to 4 znakowy wyraz, więc szukasz tego słowa w pliku T4.ini

0

Dobry sposób Opi, a co do wyszukiwania po kolei to nie ma sensu, bo za długo zleci..

0

Dobry sposób? Chyba na marnowanie dysku.
Najlepiej zrobić plik zawierający posortowaną listę słów oddizelonych np. #13 albo #0. A potem czytać metodą dziel i zwyciężaj. Sposób Opiego to najlepsza droga do zapchania dysku.

0

13 milinów słów = 13 000 000
Jedno słowo = około 8 znaków (bajtów)
13 000 000 * 8 = 104 000 000 bajtów
104 000 000 bajty = niecałe 100 99 GB
Chyba, że popełniłem błąd w obliczeniach.

0

Autor nie napisał, że jest tam 13 mln różnych słów ale napisał, że potrzebuje dostać jako wynik linię w której dane słowo występuje, a nie tylko informację czy plik istnieje.

Jeśli masz zrobić jakąś usługę indeksującą plik to możesz np posortować go, keszować zapytania w pamięci i zastosować np filtr Blooma do odsiewania zapytań do pliku.

0

Też jestem zainteresowany tym tematem.

Mam na dysku słownik ~35mb. Słowa w nim zapisane są mniej więcej w taki sposób:

aa
aaa
abace
abaci
abacie
abadańscy
abadańska
abadańską
abadański
abadańskich
abadańskie

Są posortowane alfabetycznie. Czy istnieje jakiś szybki sposób, na wyszukiwanie tych słów z tego słownika? (Podczas wpisywania tekstu w richedicie).
Oczywiście, aby zużycie RAM-u było minimalne.

Niektóre programy mają tą funkcję sprawdzania słów i odbywa się to u nich bardzo szybko, lecz korzystają ze słownika ~4mb a słowa zapisane w nim są w formacie typu:

a
A
aa
AA
aaa
Aalborg/Q
Aalto
AAN
AAP
Aara/M
Aare
Aargau
Aarhus
Aaron/NOosT
Aar/Q
Aasen/NOosT
ab
Ab
Abacja/M
abadanka/MmN
Abadan/Q
abadańczyk/NOqsT
abadański/bXxYc
Abaddon/O
abaka/MnN
abakanka/mMN
abakan/NQsT
  • do tego dochodzi mały pliczek *aff 240kb wewnątrz:
SET ISO8859-2
TRY aioeznrwcysptkmdłulj±gbhę¶ćóżfńĽvqxAIOEZNRWCYSPTKMDŁULJˇGBHʦĆÓŻFѬVQX


PFX b Y 1
PFX b   0         nie       .

SFX a Y 6
SFX a   e         ych       [^i]e
SFX a   e         ymi       [^i]e
SFX a   e         ym        [^i]e
SFX a   e         ch        ie
SFX a   e         m         ie
SFX a   e         mi        ie

SFX c Y 1
SFX c   i         u         i

SFX F Y 442
SFX F   c         głem      lec
SFX F   c         głe¶      lec
SFX F   c         gł        lec

.
.
.

Wie ktoś w jaki sposób to funkcjonuje?

1

Wie ktoś w jaki sposób to funkcjonuje?

http://pwet.fr/man/linux/fichiers_speciaux/hunspell

ale rozwiązaniem jest po prostu użycie hunspella, a nie wynajdowanie słownika na nowo.

0

Wielkie dzięki Azarien właśnie o takie coś mi chodziło, tylko mam jeden mały problem. Pobrałem sobie hunspella dla delphi, oraz wrzuciłem do niego polski słownik. Wszystko działa jak należy, gdy nie stosuję w nim polskich znaków. Jeżeli dany wyraz zawiera polskie znaki, to już go podkreśla za błędny, nawet gdy go napiszę bez polskich ogonków.

Pozdrawiam.

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