Перечислите все n-граммовые подслов в фазе - PullRequest
0 голосов
/ 12 августа 2010

Любая существующая функция, которая может решить эту проблему? Вход: A B C вывод: {A}, {B}, {C}, {A B}, {B C}, {A B C}

обратите внимание, что {A C} или {C A} не являются допустимыми выходными данными.

Ответы [ 3 ]

3 голосов
/ 12 августа 2010

В псевдокоде:

for (i=0 .. n-1) {
    for (j=i .. n-1) {
        ngrams.add(phase[i:j])
    }
}

phase[i:j] - это срез, начинающийся с i и заканчивающийся j, а n - длина (в данном случае 3)

A B C 
0 1 2

0:0 A
0:1 AB
0:2 ABC
1:1 B
1:2 BC
2:2 C
1 голос
/ 12 августа 2010

В схеме:

(define (prefix x list)
    (if (null? list)
        nil
        (cons (cons x (car list))
              (prefix x (cdr list)))))

(define (subwords phrase)
    (if (null? phrase)
        nil
        (cons (list (car phrase))
              (cons (prefix (car phrase) (subwords (cdr phrase)))
                    (subwords (cdr phrase))))))
1 голос
/ 12 августа 2010

Я понял это: O (n ^ 3) алгоритм

public static void GenerateAllGrams(string query) {
        string[] q = query.Split(' ');
        int maxgram = q.Length;
        for (int gram = 1; gram <= maxgram; gram++) {
            for (int i = 0; i < q.Length - gram + 1; i++) {
                string current = "";
                for (int j = i; j < i + gram; j++) {
                    current += q[j] + " ";
                }
                Console.WriteLine(current.Trim());
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...