2010-08-12 2 views
0

이 문제점을 처리 할 수있는 기존 기능은 무엇입니까? 입력 : A B의 C 출력 {A}, {B}, {C}, {A, B}, {B의 C}, {A B의 C}단계에서 모든 n-gram 서브 워드를 열거하십시오.

참고 {A C} 또는 {C A는} 유효 출력되지 않는다. 의사 코드

+0

모든 하위 문자열을 열거합니까? "ABCD"-> [A, B, C, AB, BC, CD, ABC, BCD, ABCD] 에서처럼? –

답변

3

:

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

phase[i:j]

A B C 
0 1 2 

0:0 A 
0:1 AB 
0:2 ABC 
1:1 B 
1:2 BC 
2:2 C 
+0

그건 내 것보다 더 우아한 해결책 같아! – Yang

+0

@Yang 여기는 [Python의 작업 샘플] (http://ideone.com/DUyI6)입니다. – NullUserException

1

난을 파악 (여기서는 3) 길이 슬라이스 i에서 시작 jn에서 종료된다 : 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()); 
      } 
     } 
    } 
1

구성표 :

(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)))))) 
관련 문제