Как сегментировать / разбить слова в файле - PullRequest
0 голосов
/ 08 апреля 2019

У меня есть файл с большим количеством слов в нем, и я должен разделить слово, что часть его уже существовала или появляется во время сканирования файла:

Некоторые слова вfile

member
members
membership
memberships

Я пробовал это, но я хотел, чтобы первые строки [i] (то есть a) продолжали цикл следующих слов

func Split(lines []string) string {
    for i := 0; i < len(lines)-1; i++ { // position of words
        j := i + 1
        fmt.Println(lines[i], lines[j])
        if strings.ContainsAny(lines[j], lines[i]) {
            s := strings.Split(dictionary[j], dictionary[i])
            fmt.Println(dictionary[i], ".", s)
        }
    }
    ...
}

, но он выводил только

member
member.s
members.hip
membership.s

Вывод, который я хочу:

member
member.s
member.ship
members.hip
member.ships
members.hips

1 Ответ

0 голосов
/ 08 апреля 2019

Для данного ввода поможет следующее.

func splitSegmant(prev string, cur string) string {
    if len(cur) < len(prev) || cur[:len(prev)] != prev {
        return ""
    }
    return fmt.Sprintf("%s.%s", cur[:len(prev)], cur[len(prev):])
}

func Split(lines []string) []string {
    splits := []string{lines[0]}
    for i := 0; i < len(lines); i++ {
        for j := 0; j < i; j++ {
            split := splitSegmant(lines[j], lines[i])
            if split != "" {
                splits = append(splits, split)
            }
        }
    }
    return splits
}

рабочий код вы можете найти здесь: детская площадка

...