Декодировать страницы построчно в PHP? - PullRequest
0 голосов
/ 17 апреля 2011

Я хотел бы проверить, существует ли каждое слово в текстовом файле в каких-либо «СТРОКАХ» другого большого текстового файла словаря.

Каждый способ, которым я пытался это сделать, не удался или работал ненадолго.

Как обойтись без миллиона вложенных циклов?

Ответы [ 2 ]

3 голосов
/ 17 апреля 2011

Я так часто отвечаю.Но регулярное выражение позволит избежать большей части зацикливания.

// get words
preg_match_all(':\p{L}{2,}:u', $text_file, $words);
$words = end($words);

// make a search regex  "abc|foobar|xyz|text|.."
$rx_words = implode("|", $words);

// find all words that exist on a line
preg_match_all(':^($rx_words)$:', file_get_contents("LINES"), $cmp);

// everything found if:
$found_all = !array_diff($cmp[1], $words);

Чтение всего файла LINES можно избежать с помощью некоторого дополнительного кодирования.Но я хотел, чтобы все было просто.

2 голосов
/ 17 апреля 2011

Psuedocode Если у вас достаточно памяти:

for each line in text file:
   break line into words
   for each word in line:
       $wordMap[lowercase($word)] = 1;

for each line:
   break line into words
   for each word:
       if $wordMap[lowercase($word)] == 1:
          line has word $word

Если у вас недостаточно памяти для $ wordMap, то сделайте $ wordMap своего рода базой данных. Вы также можете попробовать фильтр Блума (http://code.google.com/p/php-bloom-filter/, http://en.wikipedia.org/wiki/Bloom_filter).

...