Помогите с разбором строк - PullRequest
1 голос
/ 19 июля 2011

У меня есть огромный библиотечный файл, содержащий слово и его синонимы, это некоторые слова и их синонимы в формате моей библиотеки:

aantarrão|1
igrejeiro|igrejeiro|aantarrão|beato

aãsolar|1
desolar|desolar|aãsolar|afligir|arrasar|arruinar|consternar|despovoar|devastar|magoar

aba|11
amparo|amparo|aba|abrigo|achego|acostamento|adminículo|agasalho|ajuda|anteparo|apadrinhamento|apoio|arrimo|asilo|assistência|auxíjlio|auxílio|baluarte|bordão|broquel|coluna|conchego|defesa|égide|encosto|escora|esteio|favor|fulcro|muro|patrocínio|proteção|proteçâo|resguardo|socorro|sustentáculo|tutela|tutoria
apoio|apoio|aba|adesão|adminículo|amparo|aprovação|arrimo|assentimento|base|bordão|coluna|conchego|descanso|eixo|encosto|escora|espeque|fé|fulcro|proteçâo|proteção|refúgio|socorro|sustentáculo
beira|beira|aba|beirada|borda|bordo|cairel|encosta|extremidade|falda|iminência|margem|orla|ourela|proximidade|rai|riba|sopé|vertente
beirada|beirada|aba|beira|encosta|falda|margem|sopé|vertente
encosta|encosta|aba|beira|beirada|clivo|falda|lomba|sopé|subida|vertente
falda|falda|aba|beira|beirada|encosta|fralda|sopé|vertente
fralda|fralda|aba|falda|raiss|raiz|sopé
prestígio|prestígio|aba|auréola|autoridade|domínio|força|halo|importância|influência|preponderância|valia|valimento|valor
proteção|proteção|aba|abrigo|agasalho|ajuda|amparo|apoio|arrimo|asilo|auspiciar|auxílio|bafejo|capa|custódia|defesa|égide|escora|fautoria|favor|fomento|garantia|paládio|patrocínio|pistolão|quartel|refúgio|socorro|tutela|tutoria
sopé|sopé|aba|base|beira|beirada|encosta|falda|fralda|raiz|vertente
vertente|vertente|aba|beira|beirada|declive|encosta|falda|sopé

см. Слово aantarrão, а под ним синонимы, я не могу придумать, как получить слово и синонимы в ассоциативном массиве, вот что я пытаюсь сделать:

<?
$file = file('library.txt');
$array_sinonimos = array();
foreach($file as $k)
{
    $explode = explode($k, "|");
    if(is_int($explode[1]))
    {
        $word = $explode[0];
    } 
}
?>

ничего, лол, что я могу здесь сделать? цикл строк, пока я не найду пустую строку, а затем попытаться получить новое слово с разнесением?, помогите!

Ответы [ 2 ]

2 голосов
/ 19 июля 2011

Вот какой-то код, который я приготовил, похоже, работает.

Смотрите код в действии здесь: http://codepad.org/TVpYgW91

см. Код здесь

ОБНОВЛЕНО, чтобы читать построчно

    <?php 
    $filepointer = fopen("library.txt", "rb");
 $words = array();

 while(!feof($filepointer)) {
        $line = trim(fgets($filepointer));
        $content = explode("|", $line);
        if (count($content) == 0)
        continue;
        if (is_numeric(end($content))) {
        $word = reset($content);
        continue;
        }

        if (isset($words[$word]))
        $words[$word] = array_merge($words[$word], $content);
        else
        $words[$word] = $content;
    }

    print_r($words);

Так в чем же стратегия?

  1. исправить окончания строк
  2. пробегать файл строка за строкой
  3. игнорировать пустые строки (count($content))
  4. разбить строку вверх по каналам, если строка имеет числовое значение для последнего значения, то это становится нашим словом
  5. мы доберемся до последнего шага только в том случае, если ни одна из других ловушек не была затронута из-за операторов continue, поэтому, если это так, просто разделите слова по конвейеру и добавьте их или создайте элемент массива.
1 голос
/ 19 июля 2011

Попробуй это.Я не могу вспомнить, будет ли array_merge () работать с нулем, но основная идея заключается в том, что $ word - это ключ $ для массива assoc.

...