KR20130108537A - 문자열 생성 방법, 프로그램 및 시스템 - Google Patents

문자열 생성 방법, 프로그램 및 시스템 Download PDF

Info

Publication number
KR20130108537A
KR20130108537A KR1020137004451A KR20137004451A KR20130108537A KR 20130108537 A KR20130108537 A KR 20130108537A KR 1020137004451 A KR1020137004451 A KR 1020137004451A KR 20137004451 A KR20137004451 A KR 20137004451A KR 20130108537 A KR20130108537 A KR 20130108537A
Authority
KR
South Korea
Prior art keywords
string
search
context
dynamic programming
frequency
Prior art date
Application number
KR1020137004451A
Other languages
English (en)
Other versions
KR101498396B1 (ko
Inventor
유야 우노
유타 츠보이
Original Assignee
인터내셔널 비지네스 머신즈 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 인터내셔널 비지네스 머신즈 코포레이션 filed Critical 인터내셔널 비지네스 머신즈 코포레이션
Publication of KR20130108537A publication Critical patent/KR20130108537A/ko
Application granted granted Critical
Publication of KR101498396B1 publication Critical patent/KR101498396B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/30Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
    • G06F16/33Querying
    • G06F16/338Presentation of query results

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

검색 결과의 주변 문맥을 한정된 범위 내에서 적절하게 집약하여 표시하는 것을 가능하게 하는 방법을 제공하는 것이다.
모든 문맥 문자열 C={c1, ..., cn}에 대해서, 문자열 s가 커버하는 영역을, s를 프리픽스(prefix)로 하는 c의 개수와 s의 길이의 곱으로 정의한다. 그리고, 모든 문맥의 집합에 대해서, 최대 K개, 길이 L 이하의 문자열 집합 내, 다른 문자열의 부분 문자열을 선택하지 않는 제약 아래에서, 전체를 커버하는 영역을 최대로 하는 것을 구한다. 본 발명에 의하면, 이 문제는 모든 문맥을 TRIE로 한 빈도순 문맥 트리 상의 동적 계획법에서 효율적으로 해결할 수 있다. 본 발명의 다른 실시 예에 의하면, 동적 계획법에서 최대 영역을 구할 때에, 탐색으로 얻어지는 영역의 상한치를 예측함으로써, 대폭적인 탐색의 가지치기(pruning)가 가능해지고, 따라서, 처리를 고속화할 수 있다. 또, 문서의 접미사 버섯 노드를 출현 빈도 순으로 배열한, 빈도 순 접미사 트리를 만들어서, 검색과 최대 영역을 구하는 것, 양방을 고속화하는 것이 가능해진다.

Description

문자열 생성 방법, 프로그램 및 시스템{METHOD OF CHARACTER STRING GENERATION, PROGRAM AND SYSTEM}
이 발명은, 주로 자연 언어 텍스트의 문자열 검색 기술에 관한 것이고, 특히, 검색 결과를 표시하기 위한 기술에 관한 것이다.
텍스트의 문자열 검색에 있어서, 히트(hit) 위치의 전후의 문맥은, 유용한 정보를 준다. 예를 들면 "버튼"을 검색했을 때에, 그 후에 "클릭한다"가 오거나 "누른다"가 오거나 하는 등, 문서의 표현의 일관성(consistency)을 조사한다 든지, 특정의 영어의 고유 명사에 정관사가 붙는지를 확인한다 든지 할 수 있으며, 그 외에, 연어(collocation)나 인명(person name) 검색 등에서, 히트 위치의 전후의 문맥의 정보는 중요하다.
따라서, 종래 기술에 있어서, 검색 단어의 전후에 출현하는 문자열을 소트하여 표시하는, KWIC(Key Word In Context)가 알려져 있다.
KWIC에 있어서, "ボタン"(버튼)으로 검색했을 때의 모든 문맥의 예는, 다음과 같다.
ボタンが大きくて …
ボタンが赤い …
ボタンといぅ表 …
ボタンに書いてあ …
ボタンをクリツクしたら …
ボタンをクリツクして下 …
ボタンをクリツクしよぅ …
ボタンをクリツクできな …
ボタンをクリツクできま …
ボタンをクリツク …
ボタンを押したら …
ボタンを押しては …
ボタンを押せませ …
ボタンを押そうと …
그러나, KWIC는, 히트 수가 너무 많을 때에 전체의 경향을 한 눈으로 파악할 수 없다고 하는 문제점이 있었다.
야마모토 마사토(Masato Yammamoto), 다나카 구미코(Kumiko Tanaka), 나카가와 히로시(Hiroshi Nakagawa)의 “검색 엔진에 기초한 다 언어 용례 조사 툴(A Multilingual Usuage Consultation Tool based on Internet Searching): KIWI. 언어 처리 학회 전국 대회 2005, 및 특허 공개 2004-164133호 공보에 의해 개시된 기술은, 확장된 KWIC 방법을 제안하는데, 즉, 표시하는 문맥의 중요도를 특정하는 것을 가능하게 한다. 하지만, 이 확장된 방법에서도, 복수 문맥의 최적한 조합을 선택하는 것은 가능하지 않고, 유사 문서가 다수 표시된다고 하는 문제가 남는다.
특허 공개 2004-164133호 공보(일본)
야마모토 마사토, 다나카 구미코, 나카가와 히로시. 검색 엔진에 기초한 다언어 용례 조사 툴: KIWI. 언어 처리 학회 전국 대회 2005
따라서, 본 발명의 목적은, 검색 결과의 주변 문맥을, 한정된 범위 내에서 적절하게 집약시켜 표시하는 것을 가능하게 하는 방법을 제공하는 것이다.
본 발명에 있어서는, 우선, 모든 문맥 문자열 C={c1, …, cn}에 대해서, 문자열 s가 커버하는 영역을, s를 프리픽스(prefix)로 하는 c의 개수와 s의 길이의 곱으로 정의한다.
따라서, 본 발명은, 최대 K개, 길이 L 이하의 문자열 집합 중, 다른 문자열의 부분 문자열(substring)을 선택하지 않는 조건 하에서, 모든 문맥의 집합에 대해, 전체로서 커버하는 최대 영역을 구하는 방법이다. 본 발명의 실시 예에 따라, 전술한 문제는 모든 문맥을 TRIE로 하는 빈도 순 문맥 트리(a frequency-ordered context tree) 상의 동적 계획법(dynamic programming)을 사용하여 효율적으로 해결될 수 있다.
본 발명의 다른 실시 예에 의하면, 동적 계획법에 의해 최대 면적을 구할 때에, 탐색에서 얻어지는 상한 영역(upper limit area)이 예측되고, 이는 대폭의 탐색의 가지치기(pruning)를 가능하게 하여, 따라서 처리를 고속화할 수 있다.
또한, 문서의 접미사 트리에서 자(子) 노드(child nodes)는 출현 빈도 순으로 배열되고, 이는 빈도 순 접미사 트리를 형성하여, 검색과 최대 영역을 구하는 것 모두를 고속화하는 것을 가능하게 한다.
전술한 처리는, 후방 문맥(succeeding context)뿐만 아니라, 전방 문맥(preceding context)에 대해서도 자연스럽게 적용 가능하다. 또한, 전술한 처리는 단어 구분(word separation)을 사용하지 않기 때문에, 영어를 포함하는 임의의 언어 데이터, 또 시각이 들어간 이벤트 등의 해석에도 적용할 수 있다.
이 발명에 의하면, 검색 결과를 한정된 영역에 될 수 있는 만큼 많은 정보를 주도록 압축하여 표시하는 방법이 제공된다. 게다가, 동적 계획법을 사용하여, 상기 방법을 위한 계산이, 고속화될 수 있다.
도 1은 본 발명을 실시하기 위한 하드웨어 구성의 블록도이다.
도 2는 본 발명을 실시하기 위한 기능 구성의 블록도이다.
도 3은 빈도 순 접미사 트리를 구축하는 처리의 흐름도를 나타낸 도이다.
도 4는 빈도 순 접미사 트리와, 빈도 순 문맥 트리의 예를 나타낸 도이다.
도 5는 빈도 순 접미사 트리 데이터를 검색하기 위한 처리를 나타낸 도이다.
도 6은 검색과 최적 문맥의 탐색 전체의 처리의 흐름도를 나타낸 도이다.
도 7은 동적 계획법을 사용한 탐색의 처리의 흐름도를 나타낸 도이다.
도 8은 가지치기가 들어간 동적 계획법을 사용한 탐색의 처리의 흐름도를 나타낸 도이다.
도 9는 가지치기가 들어간 동적 계획법을 사용한 탐색의 처리의 흐름도를 나타낸 도이다.
도 10은 최대 영역 노드 집합의 복원 처리의 흐름도를 나타낸 도이다.
도 11은 KWIC의 비가역(非可逆) 압축 표시의 예를 나타낸 도이다.
도 12는 종래의 전형적인 방법과, 본 발명의 실시 예의 방법의 문맥 표시 비교를 나타낸 도이다.
이하, 도면에 기초하여, 본 발명의 실시 예를 설명하겠다. 특별히 설명하지 않는 한, 동일한 참조 번호는, 도면을 통하여, 동일한 대상을 가리키는 것으로 한다. 또한, 이하에서 설명하는 것은, 본 발명의 한 실시 형태이며, 본 발명을, 이 실시 예에서 설명하는 내용으로 한정하는 의도는 없다는 것을 이해해주길 바란다.
도 1을 참조하면, 본 발명의 한 실시 예에 관계되는 시스템 구성 및 처리를 실현하기 위한 컴퓨터 하드웨어의 블록도를 나타내고 있다. 도 1에 있어서, 시스템 버스(102)에는, CPU(104)와, 메인 메모리(RAM)(105)과, 하드 디스크 드라이브(HDD)(108)와, 키보드(110)와, 마우스(112)와, 디스플레이(114)가 접속되어 있다. CPU(104)는, 바람직하게는 32비트 또는 64비트의 아키텍처에 기초하는 것이고, 예를 들면, 인텔사의 Pentium(상표)4, Core(상표)2, Duo, Xeon(상표), AMD사의 Athlon(상표) 등을 사용할 수 있다. 메인 메모리(106)은, 바람직하게는, 2GB 이상의 용량을 가진 것이다. 하드 디스크 드라이브(108)는, 대량의 문서 데이터 및 검색을 위한 빈도 순 접미사 트리 데이터를 저장할 수 있도록, 예를 들면, 320GB 이상의 용량을 가진 것으로 하는 것이 바람직하다.
하드 디스크 드라이브(108)에는, 구체적으로 도시하지는 않지만, 오퍼레이팅 시스템이, 미리 저장되어 있다. 오퍼레이팅 시스템은, Linux(상표), 마이크로 소프트사의 Windows(상표) 7, Windows XP(상표), Windows(상표) 2000, 애플 컴퓨터의 Mac OS(상표) 등의, CPU(104)에 적합한 임의의 것이 될 수 있다.
하드 디스크 드라이브(108)에는 또, 검색되는 텍스트 데이터와, 텍스트 데이터로부터, 빈도 순 접미사 트리 데이터를 생성하는 빈도 순 접미사 트리 작성 모듈과, 빈도 순 접미사 트리 작성 모듈에 의해 작성된 빈도 순 접미사 트리 데이터와, 유저가 지정한 키워드에 기초하여, 본 발명의 방법에 의해 문맥 문자열을 구하고, 표시를 압축한 형태로 문자열을 출력하는 문자열 검색 모듈과, 문자열 검색 모듈에 의해 출력된 문자열을, 디스플레이(114)에 표시하기 위한 GUI 모듈이 저장된다. 이들 데이터 및 모듈에 대해서는, 도 2의 기능 블록도를 참조하고, 후반에, 보다 상세히 설명하겠다.
키보드(110) 및 마우스(112)는, 오퍼레이팅 시스템 또는, 하드 디스크 드라이브(108)로부터 메인 메모리(106)에 로드되어, 디스플레이(114)에 표시되는 프로그램(도시하지 않음)을 기동하거나, 검색하기 위한 문자를 입력하거나 하기 위해 사용된다.
디스플레이(114)는, 바람직하게는, 액정 디스플레이이고, 예를 들면, XGA(1024*768의 해상도), 또는 UXGA(1600*1200의 해상도) 등의 임의의 해상도의 것을 사용할 수 있다.
다음으로, 도 2의 기능 블록도를 참조하여, 본 발명의 처리를 위한 기능 요소에 대해 설명하겠다. 텍스트 파일(202)은, 하드 디스크 드라이브(108)에 저장된 대용량 파일이며, 바람직하게는 자연 언어 텍스트 데이터를 포함한다.
빈도 순 접미사 트리 구축 모듈(204)은, 텍스트 파일(202)을 리드하여, 빈도 순 접미사 트리 데이터(206)로서, 하드 디스크 드라이브(108)에 저장한다. 빈도 순 접미사 트리 구축 모듈(204)의 처리에 대해서는, 도 3의 흐름도를 참조하여, 후반에 보다 상세히 설명하겠다.
문자열 검색 모듈(208)은, 본 발명의 요부인 처리에 관한 기능을 포함하며, 유저가 입력한 키워드에 기초하여, 문맥 문자열을 검색하고, 또, 그것을 기초로, 압축 표시 문자열을 계산하여 제공한다. 문자열 검색 모듈(208)의 처리는, 도 6 이하의 흐름도를 참조하여, 후반에 보다 상세히 설명하겠다.
GUI 모듈(210)은, 키보드(110) 및 마우스(112)를 사용하여 유저가 입력한 문자열을 문자열 검색 모듈(208)에 보내고, 문자열 검색 모듈(208)의 문맥 문자열을 출력을 디스플레이(114)에 표시하는 기능을 가진다.
빈도 순 접미사 트리 구축 모듈(204), 문자열 검색 모듈(208), 및 GUI 모듈(210)은, C, C++, C#, Java(상표) 등의 기존의 프로그램 언어로 작성될 수 있다. GUI 모듈(210)은, 유저의 문자열 입력을 리드, 혹은, 문맥 문자열의 출력을, 디스플레이(114)에 표시하기 위해, 바람직하게는, 오퍼레이팅 시스템이 제공하는 API 함수를 불러내도록 프로그래밍 된다.
다음으로, 도 3의 흐름도를 참조하여, 빈도 순 접미사 트리 구축 모듈(204)이 빈도 순 접미사 트리 데이터를 작성하여 출력하는 처리에 대해서 설명하겠다. 이 처리는, 종래 기술의 범위로, 본 발명의 특징을 구성하는 것이 아니라는 것을 이해해주길 바란다.
빈도 순 접미사 트리란, 문서의 모든 접미사에 대해서 만들어지는 TRIE이다. 모든 접미사란, 문서의 모든 위치 이후의 문자열의 집합을 말한다. 따라서, 길이 n의 문서에 대해서, n개 존재한다. 단, TRIE의 각 노드의 자(子) 노드는, 잎(leaves)의 총수가 많은 순으로 소트된다. 잎의 총수가 아니라, 알파벳 순으로 소트된 것이, 일반적인 접미사 트리다. 빈도 순 접미사 트리의 사이즈는, 접미사 트리와 같은 O(n)이고, 최대라도 2n개의 노드이다.
빈도 순 접미사 트리 구축 모듈(204)은, 도 3의 단계(302)에서, 텍스트 파일(202)을 리드하여, 단계(304)에서, 접미사 배열 구축을 수행한다. 이 처리는 예를 들면, Ge Nong, Sen Zhang, Wai Hong Chan, “Two Efficient Algorithms for Linear Suffix Array Construction”, IEEE Transactions on Computers, 2008에 기술된 방법을 사용한다.
단계(306)에서, 빈도 순 접미사 트리 구축 모듈(204)은, 최대 접두사(prefix) 길이의 계산을 수행한다. 이 처리는 예를 들면, Toru Kasai, Gunho Lee, Hiroki Arimura, Setsuo Arikawa, and Kunsoo Park: Linear-Time Longest-Common-Prefix Computation in Suffix Arrays and Its Applications, In proc. of 12th Annual Symposium on Combinatorial Pattern Matching, pp. 181-192, 2001에 기술된 방법을 사용한다.
단계(308)에서, 빈도 순 접미사 트리 구축 모둘(204)은, 돌아가는 순으로(in post-order) 최초의 노드를 n으로 한다. 접미사 배열을 돌아가는 순으로 찾는 처리도, 예를 들면, Toru Kasai, Gunho Lee, Hiroki Arimura, Setsuo Arikawa, and Kunsoo Park: Linear-Time Longest-Common-Prefix Computation in Suffix Arrays and Its Applications, In proc. of 12th Annual Symposium on Combinatorial Pattern Matching, pp. 181-192, 2001에 기술되어 있다.
단계(310)에서, 빈도 순 접미사 구축 모듈(204)은, n이 돌아가는 순으로(in post-order) 제일 마지막 노드인지를 결정하고, 제일 마지막이면, 처리를 종료한다.
제일 마지막이 아니면, 단계(312)로 진행하고, 빈도 순 접미사 트리 구축 모듈(204)은, n의 자(子) 노드를 파일로 출력하고, 이것은, 빈도 순 접미사 트리 데이터(206)로서 하드 디스크 드라이브(108)에 저장된다.
단계(316)에서, n에 n의 다음의 노드가 대입되고, 처리는, 단계(310)의 결정으로 리턴한다.
도 4(a)는, 이와 같이 하여 구축된 빈도 순 접미사 트리의 한 예의 트리 구조를 나타낸 도이다. 도 4에 있어서, "ボ"와 "タ" 등은 각각, 빈도 순 접미사 트리의 노드이고, 노드의 위에 나타낸 숫자는, 출현 회수를 나타낸다. 특히 도 4에서, 참조 번호 402에서 나타낸 영역은, "ボタン"에 대한 빈도 순 문맥 트리를 나타낸다. 빈도 순 접미사 트리는, 소정의 검색해야 할 텍스트 파일에 대해서, 한 번만 작성하여, 하드 디스크 드라이브(108)에 저장해두면, 텍스트 파일이 변하지 않는 한, 작성을 고치지 않고, 몇 번이고 검색에 사용할 수 있다.
한편, 도 4(b)는, 빈도 순 문맥 트리의 예를 나타낸 도이다. 빈도 순 문맥 트리는, 특정의 키워드로, 빈도 순 접미사 트리를 검색하여서, 메인 메모리 또는 하드 디스크 드라이브(108) 상에 동적으로 생성된다. 후술하는, 본 발명의 동적 계획법은, 이와 같이 동적으로 생성된 빈도 순 문맥 트리 상에서 실행된다.
빈도 순 접미사 트리 상에서의 검색은, 접미사 트리 상에서의 검색과 같은 방법으로 실행 가능하다. 단, 각 자(子) 노드는, 알파벳 순으로 배열되어 있지 않기 때문에, 선형 탐색이 필요하다. 이때, 자(子) 노드를 데이터 구조 내에 순차로(in sequence) 배열하여 두면, 쿼리(query) 길이에 비례한 회수의 랜덤 액세스만으로 검색 가능하다. 그리하여, 탐색이 끝난 노드를 루트하는 부분 트리(sub-tree)가, 빈도 순 문맥 트리가 된다.
다음으로, 도 3의 처리에 의해 구축된 빈도 순 접미사 트리 데이터(206)를 검색하기 위한 처리를, 도 5에 나타낸다. 이 처리는, 바람직하게는, 문자열 검색 모듈(208)의 서브루틴 함수들의 하나인 search()로서 구현된다.
도 5의 search라고 하는 함수의 흐름도에 있어서, s는 쿼리 문자열을 나타낸다. 단계(502)에서, n에 루트 노드(ROOT)가 대입된다. 단계(504)에서, p=0이라고 하면, 단계(506)에서, p=|s|인지를 결정한다. 여기에서, |s|란, s의 길이이다. 만일 p=|s|라면, 함수 search는, n을 돌려주고 종료한다.
만일 p=|s|가 아니라면, 단계(508)로 진행하고, 거기서 n=null인지를 결정한다. 만일 n=null이라면, 함수 search는, n을 돌려주고 종료한다.
만일 n=null이 아니라면, 단계(510)로 진행하고, 거기서, c=get_char(n)이 실행된다. get_char(n)은 노드 n에 대한 문자를 돌려준다.
단계(512)에서, s[p]=c인지를 결정한다. 여기에서, s[p]란, 문자열s의 p번째의 문자이다. 만일 s[p]=c라면, 단계(514)에서, p=p+1로 p가 증분되고(incremented), 단계(516)에서, n=chd(n)으로, n의 최초의 자(子) 노드인 chd(n)이 n에 대입된다. 그렇게 하여 처리는, 단계(506)으로 리턴한다.
단계(512)에서, s[p]=c가 아니라면, 단계(518)에서, n=sib(n)으로, n의 다음의 형제 노드(the next sibling node)인 sib(n)이 n에 대입된다. 그렇게 하여 처리는, 단계(508)로 리턴한다. 이 search(s)의 실행 후, 돌아온 값 n을 루트로 하는 빈도 순 접미사 트리의 부분 트리가, 도 4(b)에 예시한 것 같은 빈도 순 문맥 트리로서, 메인 메모리(106) 또는, 하드 디스크 드라이브(108) 상에 구축된다.
도 6은, 문자열 검색 모듈(208)이 실행하는, 검색과 최적 문맥의 탐색 전체의 처리의 흐름도를 나타낸 도이다.
문자열 검색 모듈(208)은, 단계(602)에서, 도 5의 흐름도에서 나타낸 함수 search(s)를 불러내어, 그 결과를 n에 돌려준다. 여기에서, s는 쿼리 문자열이고, GUI 모듈(210)을 통하여 유저가 입력한 것이다.
문자열 검색 모듈(208)은, 단계(604)에서 n이 null인지 결정하고, 만일 그렇다면, 단계(606)에서, 문자열이 발견되지 않았다는 취지를 출력하고 처리를 종료한다. 이 처리는 전형적으로는, 문자열 검색 모듈(208)이 GUI 모듈(210)에 메시지를 보내고, 디스플레이(114)에 표시시키는 것에 의해 수행된다.
문자열 검색 모듈(208)이 단계(604)에서 n이 null이 아니라고 결정하면, 문자열 검색 모듈(208)은, 단계(608)에서, 동적 계획법을 사용한 탐색의 처리를 수행한다. 이 실시 예에서는, 문자열 검색 모듈(208)은, 동적 계획법으로서, 도 7의 흐름도에 기초하여 후반에 설명하는 동적 계획법의 함수 f(n, K) 또는, 도 8 및 도 9의 흐름도에 기초하여 후반에 설명하는 가지치기가 들어간 동적 계획법의 함수 g(n, K, 0) 중 어느 한쪽, 또는 양쪽을 서브루틴으로서 가질 수 있다. 또한, 여기에서, K는 최대 문자열 선택 수이다. 이 단계에서는, 단계(602)에서, search(s)가 구축한 빈도 순 문맥 트리에, 동적 계획법이 적용된다.
함수 g(n, K, 0)는, 가지치기가 들어간 처리에 의해, f(n, K)보다 대규모인 빈도 순 문맥 트리에 대한 탐색에 적합하다. 따라서, 문자열 검색 모듈(208)은, 빈도 순 문맥 트리가 소정의 규모보다 큰 경우에 g(n, K, 0)를 적용하고, 그렇지 않은 경우에 f(n, K)를 적용하도록 한다.
단계(608)에서, f(n, K) 또는 g(n, K, 0) 중 한쪽을 실행한 후, 문자열 검색 모듈(208)은, 단계(610)에서, (n, K)에 관하여 최대값을 돌려준 노드를 함수 r을 이용하여 복원한다. 함수 r의 처리는, 도 10의 흐름도를 참조하여, 후반에서 상세히 설명하겠다.
이렇게 하여, 각 노드에 대응하는 문자열이 얻어지면, 문자열 검색 모듈(208)은, 그것들의 문자열을, 단계(612)에서 GUI 모듈(210)에 보내고, 디스플레이(114)에 표시시킨다.
다음으로 본 발명의 동적 계획법의 처리에 관한 설명으로 이동하는데, 그 전에, 본 발명에 있어서 영역, 및 영역 최대화의 정의에 대해 설명하겠다.
우선, 최대로 세로 K행, 가로 L문자의 표시 영역(display region)에 문맥의 요약을 표시한다고 하자. 그리고, n건의 문맥 집합은 C={c1, ...., cn}이고, m건의 문자열 집합은 S={s1, ..., sm}이라 한다. 단, m≤K, len(s)≤L이라고 한다. 여기서, len(s)는, 문자열s의 길이이다.
또한, S 내 임의의 문자열은, 다른 문자열의 프리픽스(prefix)가 아니라고 하자. 이것은, "を"(을, 를)와 "を使う"(~를 사용하다)와 "を使うとき"(~를 사용할 때)와 같은 유사 문자열이 나오는 것을 방지하기 위함이다.
따라서. S가 C를 커버하는 영역 A(S, C)는, 하기의 식으로 정의한다.
Figure pct00001
여기서, CP(s, C)는, C 내에서 s를 프리픽스로 하는 개수이며, len(s)는 s의 길이를 돌려준다. 여기서, 구하고 싶은 것은, 어떤 C에 대해서, 영역을 최대로 하는 S, 즉 argmax s A(S,C)를 구하는 것이다.
하지만 일반적으로, S의 후보는 방대하므로, 본 발명에서는, 동적 계획법을 적용하여 합리적으로 S를 계산하여 구하도록 한다.
이상의 정의 아래, 도 7의 흐름도를 참조하여, f(n, k)의 처리를 설명하겠다. f(n, k)란, 노드n, 그 자(子) 노드들, 그리고 그 형제 노드들 중, 최대 k개를 선택했을 때 얻어지는 최대 영역을 돌려주는 함수이다.
단계(702)에서, 변수a에 대해서, a=0으로 한다. 단계(704)에서, n=null인지를 결정한다. 만일 n=null이라면, 함수 f()는, a를 돌려주고 종료한다.
만일 n=null이 아니라면, 단계(706)로 진행하고, (n, k)에 대해 처리를 완료했는지를 결정한다. 만일 (n, k)에 대해 처리가 완료되었다면, 단계(708)에서, 함수 f()는, (n, k)에 대한 이전의 처리에서 얻어진 값 a를 돌려주고 종료한다.
(n, k)에 대한 처리가 아직 완료되지 아니하였다면, 단계(710)에서, ss=f(sib(n), k-1)에 의해, f()가 재귀적으로(regressively) 호출 되고(called), 그것의 리턴 값은 ss에 대입된다. 여기서, sib(n)은, n의 다음의 형제 노드이다.
단계(712)에서, a=s(n)+ss에 의해서, 계산된 값이 a에 대입된다. 여기서, s(n)이란, 상기에서 정의한 영역을 이용한 경우의 노드n이 커버하는 영역이다. 단계(712)에서의 계산 결과를, *A라고 한다.
다음으로, 단계(714)에서는 c=0이라고 하고, 단계(716)로부터 단계(724)까지는, c를 하나씩 증분하면서, 단계(716)에서 c>k라고 결정하기까지, 처리를 반복한다.
즉, 단계(718)에서는, cs=f(chd(n), c)에 의해, 계산된 값이 cs에 대입된다. 여기서, chd(n)이란, 노드 n의 최초의 자(子) 노드이다.
단계(720)에서는, ss=f(sib(n), k-c)에 의해, 계산된 값이 ss에 대입된다.
단계(722)에서는, a=max(a, cs+ss)에 의해, 계산된 값이 a에 대입된다. 단계(722)에서의 계산 결과를, *B라고 한다.
단계(724)에서는, c=c+1에 의해 c가 증분되어, 단계(716)의 결정으로 돌아온다. 루프가 돌아 단계(716)에서 c>k가 되면, 단계(726)에서 (n, k)에 대한 처리를 처리 완료하여, 함수 f()는, a를 돌려주고 종료한다.
다음으로, 도 8 및 도 9의 흐름도를 참조하여, 가지치기가 들어간 동적 계획법의 함수 g(n, k, m)의 처리에 대해 설명한다. 도 7에서 설명한 함수 f는 최대값을 제공하는 조합을 탐색하는 함수이다. 함수 g는, 탐색 도중에 최대값을 제공하므로, 남은 처리를 계속해도 최대값에 도달하지 않는다는 것이 알려지면 함수 g는 처리를 중단할 수 있다. 그 때문에, 참의 최대값의 상한(an upper limit of a true maximum value)을 예측하고, 이것이 탐색 도중에 최대값을 넘지 않음이 알려지면, 그 탐색처리는 중단된다. 즉, 효율이 좋은 가지치기(efficient pruning)를 하기 위해서는, 참의 최대값을 되도록 먼저 탐색하고, 또 되도록 참의 최대값에 가까운 상한치를, 효율 있게 계산할 필요가 있다.
이때, 계산하는 순서는, 경험적으로, c(자(子) 노드에의 할당)가 적은 경우가 최적 값이 제공되는 경우가 많기 때문에, c를 오름차순으로 탐색하는 것이 바람직하다.
또, 상한치 u(n, k)는, 참의 최대값 f(n, k) 이상의 값을 돌려주는 임의의 함수가 될 수 있다. 예를 들면, [자신을 포함한 k개의 형제 노드들이 최대 길이까지 도달한] 경우의 값과, k, k+1, …의 때의 상한치 중 최소값을 상한치로 세트하는 휴리스틱스(heuristics)가 사용될 수 있다. 이때, 자(子) 노드가 빈도 순으로 배열되어 있기 때문에, 참의 값의 상한치가 도달되었는지는 결정될 수 있다. 또한, 계산량이 검색 히트 수에 의존하지 않기 때문에, 효율이 좋다.
이와 같은 가정들에 기초하여, 가지치기가 들어간 동적 계획법의 함수 g(n, k, m)의 처리가 구성된다.
단계(802)에서, 변수a에 대해서, a=0이라고 한다. 단계(804)에서, n=null인지를 결정한다. 만일, n=null이라면, 함수 g()는, a를 돌려주고 종료한다.
도 8에서, 만일 n=null이 아니라면, 단계(806)으로 진행하고, (n, k)에 대한 처리가 완료되었는지를 결정한다. 만일 (n, k)에 대한 처리 완료되었다면, 단계(808)에서, 이전의 처리에서 (n, k)에 대해 획득된 값을 a로서 사용하는 것으로 하고, 함수 g()는, a를 돌려주고 종료한다.
한편, (n, k) 에 대한 처리 완료되지 않았다면, 단계(812)에서, u(n, k)<=m인지를 결정하고, 만일 그렇다면, 단계(810)에서, upper[n, k]=u(n, k)로 세트하고, 함수 g()는, a를 돌려주고 종료한다. 여기서 upper[n, k]는, 도 7에 관해서 설명한 함수 f(n, k)의 상한치이고, 2차원 배열에서, 각 요소는, 시스템적으로 ∞라고 간주되는 값에서 초기화된다. 또한, u(n, k)는, u(n, k)≥f(n, k)가 되는 적당한 함수이고, 그 한 예를 후반에, 도 9의 흐름도를 참조하여 설명하겠다. 단계(812)에서, u(n, k)<=m이 아니라고 결정하면, 단계(814)에서, ss=g(sib(n), k-1, m-s(n))에 의해, g()가 재귀적으로 호출 되고(recursively called), 그것의 리턴 값이 ss에 대입된다. 여기에서, sib(n)은, n의 다음의 형제 노드이다. 또, s(n)은, 상술한 것처럼, 노드 n이 커버하는 영역이다.
단계(816)에서는, a=max(m, s(n)+ss) 이 계산되고, 계산된 값이 a에 대입된다. 이 값은, *A로서, 일단 저장된다.
다음의 단계(818)에서, c=0으로 세트 되고, c>k가 될 때까지, 단계(820~832)가 반복된다.
즉, 단계(822)에서, su=u(sib(n), k-c)로, 계산된 값이 su에 대입되고, 단계(824)에서는, cs=g(chd(n), c, a-su)로, g()를 재귀적으로 호출하여 계산한 결과가 cs에 대입된다.
단계(826)에서, cs<=a-su인지를 결정하고, 만일 그렇지 않으면, 단계(828)로 진행하여, ss=g(sib(b), k-c, a-cs)로 계산된 값이 ss에 대입되며, 단계(830)에서, a=max(a, cs+ss)로, 계산된 값이 a에 대입된다. 이 값은, *B로서, 일단 저장된다. 다음으로 단계(832)에서, c=c+1로 c가 증분되어, 단계(820)으로 리턴한다.
단계(826)에서, cs<=a-su라고 결정하면, 직접 단계(832)로 가서, c=c+1로 c가 증분되어, 단계(820)으로 리턴한다.
단계(820)에서, c>k라고 결정하면, 단계(834)에서, a≤m인지를 결정하고, 만일 그렇다면, 단계(836)에서, upper[n, k]=m으로 세트되고, 함수 g()는, a를 돌려주고 종료한다.
단계(834)에서, a≤m이 아니라고 결정하면, 단계(838)에서 (n, k)에 대한 처리가 예측되는 것으로 하여, 단계(840)에서, upper[n, k]=a로 세트하고, 함수 g()는, a를 돌려주고 종료한다.
다음으로, 도 9의 흐름도를 참조하여, 함수 g()로부터 호출되는 함수 u(n, k)의 처리를 설명하겠다. 우선, 단계(902)에서 v=0, 단계(904)에서 m=n, 단계(906)에서 i=1로 각 변수가 세트된다.
단계(908)에서, i>k인지를 결정하고, 만일 그렇지 않다면, 단계(910)에서, v=v+count(m)*L으로, 계산된 값이 v에 대입된다. 여기서 L이란, 최대 문자열 길이이다. 또한, count(m)이란 m의 출현회수이다. 다음으로, 단계(912)에서, m=sib(m)으로, m이, 그 다음의 형제 노드로 치환된다. 그리고, 단계(914), i=i+1로 증분되어, 단계(908)로 리턴한다.
단계(908)에서, i>k라고 결정하면, 단계(916)으로 진행하고, 거기서, k'=k로 대입하고, 다음으로, 단계(918)에서, k'>K인지를 결정한다. 여기서 K는, 선택되는 문자열의 최대 수이다.
단계(918)에서, k'>K가 아니라고 결정되면, 단계(920)에서, v=min(v, upper[n, k'])으로, 계산된 값이 v에 대입된다. 그리고 다음으로, k'=k'+1에서 k'가 증분되어, 단계(918)로 리턴한다.
이렇게 하여, 단계(920)과 단계(922)가 반복되고, 단계(918)에서, k'>K라고 결정하면, 함수 u()는, v를 돌려주고 종료한다.
그런데, 함수 u(n, k)는, 함수 f(n, k)의 상한, 즉 반드시 u(n, k)≥f(n, k)의 조건이 성립하는 함수이다. 이 조건을 만족시키면, 본 발명의 알고리즘은 적절하게 동작하며, u(n, k)-f(n, k)가 작을수록 가지치기가 효율적으로 동작한다. 즉, u의 값은 조건을 만족하는 한 작으면 작을수록 좋고, 참의 값 f(n, k)와 일치하고 있을 때가 가장 좋다.
upper[n, k]는 이전에 계산된 상한치를 보존한다(retain). 상술한 upper[n, k]의 초기값은 ∞ 이며, 즉, upper[n, k]≥f(n, k) 조건은 항상 성립한다. 다시 말하면, upper를 사용하여, u가 설계된다.
k는, 선택되는 행들의 수(number of lines)이기 때문에, k가 클수록 f(n, k)는 큰 값이 된다. 따라서, k<k'라면 f(n, k)<f(n, k')이다. 그 때문에, f(n, k)<f(n, k')≤upper[n, k']가 된다. 즉, upper[n, k']는 f(n, k)의 상한의 조건을 만족한다. k의 값은 최대라도 K까지이기 때문에, k이상 K 이하의 k'의 값 중에서 제일 작은 upper[n, k']를 함수 u(n, k)의 출력으로서 채용하고 있다.
그렇다면, upper[n, k]가 제일 작아지는 것이 아닌가 하고 생각할지도 모르지만, 계산 순서의 관계에서, 먼저 큰 k의 값에 대해서 상한을 계산할 수도 있다. 이 계산의 결과는 재이용된다.
다음으로, 도 10의 흐름도를 참조하여, 함수 r의 처리를 설명하겠다. 이 처리는 도 6의 흐름도에 있어서 (n, k)에 관하여 최대값을 돌려준 노드를 복원하기 위해 함수 r을 사용하는 것의 단계이며, 함수 r의 인수(arguments)는 노드 n과, 정수 k이다.
단계(1002)에서, n=null인지를 결정한다. 만일 그렇다면, 함수 r은, 바로 종료한다.
단계(1004)에서, (n, k)가 *A에서 최대인지를 결정한다. 이 결정은, 도 7의 함수 f(n, k)가 동적 계획법에서 사용된 경우는, 단계(712)의 계산 결과와, 단계(722)의 계산 결과를 비교해서, 단계(712)의 계산 결과에서 최대값을 계산한 것을 의미한다. 도 8의 함수 g(n, k, m)이 가지치기가 들어간 동적 계획법으로서 사용된 경우는, 단계(816)의 계산 결과와, 단계(830)의 계산 결과를 비교하여, 단계(816)의 계산 결과에서 최대값을 계산한 것을 의미한다.
단계(1004)에서, (n, k)가 *A에서 최대라고 결정되면, 단계(1006)에서 n이 노드 집합에 추가되고, 단계(1008)에서, r(sib(n), k-1)에 의해, r()이 재귀적으로 호출되고, 함수 r은 종료한다.
단계(1004)에서, (n, k)가 *A에서 최대가 아니라고 결정되면, 단계(1010)으로 진행하고, 거기서, (n, k)가 *B에서 최대인지를 결정한다. 이 결정은, 도 7의 함수 f(n, k)가 동적 계획법에서 사용된 경우는, 단계(712)의 계산 결과와, 단계(722)의 계산 결과를 비교하여, 단계(722)의 계산 결과에서 최대값을 계산한 것을 의미한다. 도 8의 함수 g(n, k, m)이 가지치기가 들어간 동적 계획법으로서 사용된 경우는, 단계(816)의 계산 결과와, 단계(830)의 계산 결과를 비교하여, 단계(830)의 계산 결과에서 최대값을 계산한 것을 의미한다.
단계(1010)에서, (n, k)가 *B에서 최대라고 결정되면, 단계(1012)에서 r(chd(n), c)가 재귀적으로 호출되고, 단계(1014)에서, r(sib(n), k-c)에 의해, r()이 재귀적으로 호출되고, 함수 r은 종료한다. 여기서 c는, 도 7의 흐름도에서는, 단계(714)에서 초기화되고, 그 후 단계(722)에서 a의 최대값을 계산했을 때의 값이며, 도 8의 흐름도에서는, 단계(818)에서 초기화되고, 그 후 단계(830)에서 a의 최대값을 계산했을 때의 값이다.
단계(1010)에서, (n, k)가 *B에서 최대가 아니라고 결정하면, 함수 r은, 바로 종료한다. 이렇게 하여 복원된 노드들이, 도 6의 단계(612)에서 GUI 모듈(210)에 보내져, 디스플레이(114)에 표시된다.
도 11은, 배경 기술에서 설명한 KWIC를, 본 발명의 방법에 따라, K=3이라고 하는 극단적으로 좁은 영역에 압축하여 표시한 예이다. 이 예에서는, K=3이라도, "ボタンをクリツクして…", "ボタンをクリツクでき…", "ボタンを押…"에 의해서 표시된 KWIC의 좋은 예들이 될 수 있음을 알 수 있다.
도 12는, 어떤 특정의 매뉴얼 문서에 대해서, "デ一タベ一ス"(데이터베이스)라고 하는 쿼리에서, 배경 기술에서 기술한 것처럼 종래의 전형적인 방법으로 서치한 결과와, 본 발명의 방법으로 서치한 결과를 비교한 도이다. 특히, 길이는 L(=10)에서 잘랐고, 출현 빈도가 많은 K(=10)건을 표시한 예로 비교하고 있다. "22:" 등으로 표시한 것은, 출현 빈도이다.
본 발명의 방법은, "デ一タベ一ス·サ一バ一を起動"(데이터베이스 서버를 기동한다), "デ一タベ一ス·サ一バ一が停止する"(데이터베이스 서버가 정지한다) 등을 "デ一タベ一スサ一バ一"(데이터베이스 서버)에 집중하여 카운트하기 때문에, 빈출 문맥을 알기 쉽다. 한편, 종래 기술에서는, 빈출 단어의 출현 총수가 적게 카운트되어, 최악의 경우, 빈출 문맥을 발견할 수 없는 경우도 있다.
특히, 가지치기가 들어간 동적 계획법을 사용한 실시 예의 경우, 실험에서는, 20MB 정도의 데이터에 대해서, 가지치기가 없는 동적 계획법에 비해, 최대 20배의 고속화에 성공하였다.
또한, 사전에 빈도 순 접미사 트리를 만들면, N그램 인덱스 등에서 검색하고 나서, 빈도 순 문맥 트리를 만드는 것보다 효율적이다. 그 때문에, 대규모화에도 적용할 수 있게 된다.
본 발명은, 매뉴얼이나 비즈니스 문서에 있어서, 표현 통일이나 사례 검색에도, 유리하게 적용할 수 있다.
텍스트 마이닝 프로그램에서, 빈도 톱의 K개를 표시하는 알고리즘을 이용하는 것도 있지만, 그때, 집계 단위는 단어 단위가 되어 반드시 유저의 흥미와 맞지 않는다는 것이 문제가 되고 있다. 본 발명은, 어떤 문맥을 적절하게 표현하는 가변 길이의 톱 K개를 표시하는 것이 가능하고, 텍스트 마이닝 프로그램에서의 응용도 기대할 수 있다.
또한, 상기 실시 예에서는, 빈도 순 접두사 트리를 구축했지만, 문서를 반대방향으로 하고, 접미사 트리를 구축하는 것도 가능하다. 이것을 수행하면 전방 문맥을 정리할 수 있다. 예를 들면 "서버"라고 하는 쿼리에 대해서 "메일 서버", "NFS 서버", "웹 서버" 등을 돌려주는 것이 가능해진다.
그 구체적인 처리는, 문서를 반대 방향으로 하여 빈도 순 접미사 트리를 구축하고, 쿼리 문자열을 반대 방향으로 하며, 영역 최대화의 문맥 집합을 탐색하고, 탐색 결과를 반대 방향으로 하여 표시하는 것이다.
이상, 본 발명의 실시 예를 설명하였는데, 본 발명은, 임의의 컴퓨터의 하드웨어 및 플랫폼에서 실시 가능하다는 것을 이해해주길 바란다. 또, 일본어 이외의 임의의 언어에 적용 가능하다는 것도, 이 분야의 당 업자라면, 이해할 수 있을 것이다.
102: 시스템 버스, 104: CPU, 106: 메인 메모리, 108: 하드 디스크 드라이브, 110: 키보드, 112: 마우스, 114: 디스플레이, 202: 텍스트 파일, 204: 빈도 순 접미사 트리 구축 모듈, 206: 빈도 순 접미사 트리 데이터, 208: 문자열 검색 모듈, 210: GUI 모듈

Claims (12)

  1. 컴퓨터의 처리에 의해, 표시해야 할 문자열을 생성하는 방법에 있어서,
    키워드에 기초하여, 문서를 검색하고, 상기 키워드를 포함하는, n개(n은, 1이상의 정수)의 요소 c로부터 만들어지는 문맥 문자열 C를 얻는 단계와,
    문자열 s가 문맥 문자열 C를 커버하는 영역을, s를 프리픽스로 하는, C의 요소인 c의 개수와 s의 길이의 곱으로 정의했을 때, 표시되는 문자열의 최대수가 K개(K는, 1 이상의 정수) 이하라고 하는 조건 아래에서, 상기 영역의 합을 최대로 하는 s의 집합을 구하는 단계를 포함하는,
    문자열 생성 방법.
  2. 청구항 1에서, 상기 s의 집합을 구하는 단계는, 동적 계획법에 기초하는,
    방법.
  3. 청구항 2에서, 검색해야 할 문서 집합이, 빈도 순 접미사 트리 데이터로서 구성되고, 상기 동적 계획법은, 상기 빈도 순 접미사 트리에 대한 검색 결과로부터 얻어진 빈도 순 문맥 트리 데이터 상의 동적 계획법인,
    방법.
  4. 청구항 3에서, 상기 동적 계획법은, 빈도 순 문맥 트리 데이터 상의 탐색 도중에 최대값을 제공하고, 상한치가 최대값에 도달하지 않으면 상기 탐색을 포기하는, 가지치기 처리를 수행하는,
    방법.
  5. 컴퓨터의 처리에 의해, 표시해야 할 문자열을 생성하는 프로그램에 있어서,
    상기 컴퓨터를 사용하여,
    키워드에 기초하여, 문서를 검색하고, 상기 키워드를 포함하는, n개(n은, 1이상의 정수)의 요소 c로부터 만들어지는 문맥 문자열 C를 얻는 단계와,
    문자열 s가 문맥 문자열 C를 커버하는 영역을, s를 프리픽스로 하는, C의 요소인 c의 개수와 s의 길이의 곱으로 정의했을 때, 표시되는 문자열의 최대수가 K개(K는, 1 이상의 정수) 이하라고 하는 조건 아래에서, 상기 영역의 합을 최대로 하는 s의 집합을 구하는 단계를 실행시키는,
    문자열 생성 프로그램.
  6. 청구항 5에서, 상기 s의 집합을 구하는 단계는, 동적 계획법에 기초하는,
    프로그램.
  7. 청구항 6에서, 검색해야 할 문서 집합이, 빈도 순 접미사 트리 데이터로서 구성되고, 상기 동적 계획법은, 상기 빈도 순 접미사 트리에 대하는 검색 결과로부터 얻어진 빈도 순 문맥 트리 데이터 상의 동적 계획법인,
    프로그램.
  8. 청구항 7에서, 상기 동적 계획법은, 빈도 순 문맥 트리 데이터 상의 탐색 도중에 최대값을 제공하고, 상한치가 최대값에 도달하지 않으면 상기 탐색을 포기하는, 가지치기 처리를 수행하는,
    프로그램.
  9. 컴퓨터의 처리에 의해, 표시해야 할 문자열을 생성하는 시스템에 있어서,
    키워드에 기초하여, 문서를 검색하고, 상기 키워드를 포함하는, n개(n은, 1이상의 정수)의 요소 c로부터 만들어지는 문맥 문자열 C를 얻는 수단과,
    문자열 s가 문맥 문자열 C를 커버하는 영역을, s를 프리픽스로 하는, C의 요소인 c의 개수와 s의 길이의 곱으로 정의했을 때, 표시되는 문자열의 최대수가 K개(K는, 1 이상의 정수) 이하라고 하는 조건 아래에서, 상기 영역의 합을 최대로 하는 s의 집합을 구하는 수단을 갖는,
    문자열 생성 시스템.
  10. 청구항 9에서, 상기 s의 집합을 구하는 수단은, 동적 계획법에 기초하는,
    시스템.
  11. 청구항 10에서, 검색해야 할 문서 집합이, 빈도 순 접미사 트리 데이터로서 구성되고, 상기 동적 계획법은, 상기 빈도 순 접미사 트리에 대한 검색 결과로부터 얻어진 빈도 순 문맥 트리 데이터 상의 동적 계획법인,
    시스템.
  12. 청구항 11에서, 상기 동적 계획법은, 빈도 순 문맥 트리 데이터 상의 탐색 도중에 최대값을 제공하고, 상한치가 최대값에 도달하지 않으면 상기 탐색을 포기하는, 가지치기 처리를 수행하는,
    시스템.
KR1020137004451A 2010-08-06 2011-07-11 문자열 생성 방법, 프로그램 및 시스템 KR101498396B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
JP2010177996 2010-08-06
JPJP-P-2010-177996 2010-08-06
PCT/JP2011/065802 WO2012017782A1 (ja) 2010-08-06 2011-07-11 文字列生成方法、プログラム及びシステム

Publications (2)

Publication Number Publication Date
KR20130108537A true KR20130108537A (ko) 2013-10-04
KR101498396B1 KR101498396B1 (ko) 2015-03-03

Family

ID=45556879

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137004451A KR101498396B1 (ko) 2010-08-06 2011-07-11 문자열 생성 방법, 프로그램 및 시스템

Country Status (7)

Country Link
US (1) US8954402B2 (ko)
EP (1) EP2602724A4 (ko)
JP (1) JP5337308B2 (ko)
KR (1) KR101498396B1 (ko)
CN (1) CN103052951B (ko)
CA (1) CA2804514A1 (ko)
WO (1) WO2012017782A1 (ko)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150161266A1 (en) * 2012-06-28 2015-06-11 Google Inc. Systems and methods for more efficient source code searching
CN103390044B (zh) * 2013-07-19 2017-02-08 百度在线网络技术(北京)有限公司 一种连锁类兴趣点数据识别方法及装置
US9824160B2 (en) * 2014-06-02 2017-11-21 SynerScope B.V. Computer implemented method and device for accessing a data set
CN108073679B (zh) * 2017-11-10 2021-09-28 中国科学院信息工程研究所 一种串匹配场景下随机模式串集合生成方法、设备和可读存储介质
CN109189828A (zh) * 2018-08-16 2019-01-11 国云科技股份有限公司 一种基于复杂网络的业务部门间数据价值评估的方法
US11106642B2 (en) * 2018-12-26 2021-08-31 Io-Tahoe LLC. Cataloging database metadata using a probabilistic signature matching process
EP4040304A4 (en) * 2019-09-30 2022-09-14 Fujitsu Limited SAMPLE SEARCH PROGRAM, SAMPLE SEARCH DEVICE AND SAMPLE SEARCH PROCEDURE
CN112966505B (zh) * 2021-01-21 2021-10-15 哈尔滨工业大学 一种从文本语料中提取持续性热点短语的方法、装置及存储介质

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7124199B2 (en) * 2001-12-28 2006-10-17 Autodesk, Inc. Turn restriction handling enhancement
CA2411227C (en) * 2002-07-03 2007-01-09 2012244 Ontario Inc. System and method of creating and using compact linguistic data
JP2004164133A (ja) 2002-11-11 2004-06-10 Hiroshi Nakagawa 抽出装置、用例検索装置、ならびに、プログラム
JP2005222263A (ja) * 2004-02-05 2005-08-18 Hitachi Ltd 用語閲覧型情報アクセス支援システム
US20060106769A1 (en) * 2004-11-12 2006-05-18 Gibbs Kevin A Method and system for autocompletion for languages having ideographs and phonetic characters
US7461056B2 (en) * 2005-02-09 2008-12-02 Microsoft Corporation Text mining apparatus and associated methods
JP2007213157A (ja) * 2006-02-07 2007-08-23 Just Syst Corp 用例文検索装置および用例文検索方法
GB2452760A (en) * 2007-09-14 2009-03-18 Data Connection Ltd Storing and searching data in a database tree structure for use in data packet routing applications.
JP5434408B2 (ja) * 2009-05-15 2014-03-05 富士通株式会社 携帯型情報処理装置、コンテンツ再生方法およびコンテンツ再生プログラム
US8996550B2 (en) * 2009-06-03 2015-03-31 Google Inc. Autocompletion for partially entered query

Also Published As

Publication number Publication date
US8954402B2 (en) 2015-02-10
CN103052951A (zh) 2013-04-17
KR101498396B1 (ko) 2015-03-03
JP5337308B2 (ja) 2013-11-06
EP2602724A1 (en) 2013-06-12
JPWO2012017782A1 (ja) 2013-10-03
CN103052951B (zh) 2016-01-06
US20120036149A1 (en) 2012-02-09
CA2804514A1 (en) 2012-02-09
WO2012017782A1 (ja) 2012-02-09
EP2602724A4 (en) 2016-08-17

Similar Documents

Publication Publication Date Title
KR20130108537A (ko) 문자열 생성 방법, 프로그램 및 시스템
US8190613B2 (en) System, method and program for creating index for database
KR101646754B1 (ko) 모바일 시멘틱 검색 장치 및 그 방법
US20080288442A1 (en) Ontology Based Text Indexing
CN111737997A (zh) 一种文本相似度确定方法、设备及储存介质
JP7388256B2 (ja) 情報処理装置及び情報処理方法
CN112527954A (zh) 非结构化数据全文搜索方法、系统及计算机设备
Zhang et al. Research and improvement of search engine based on Lucene
WO2022134824A1 (en) Tuning query generation patterns
JP4025181B2 (ja) 文書管理装置
US10380195B1 (en) Grouping documents by content similarity
Dhanapal An intelligent information retrieval agent
CN113297854A (zh) 文本到知识图谱实体的映射方法、装置、设备及存储介质
CN113051900A (zh) 同义词识别方法、装置、计算机设备及存储介质
Canhasi Fast Document Summarization using Locality Sensitive Hashing and Memory Access Efficient Node Ranking.
JP6634001B2 (ja) テキスト要約装置、方法、及びプログラム
CN112364175B (zh) 基于web资源的本体概念层次获取方法、系统及存储介质
JP5416680B2 (ja) 文書分割検索装置及び方法及びプログラム
JP5366709B2 (ja) 情報処理装置、共通文字列出力方法及びプログラム
Stehouwer et al. Finding patterns in strings using suffixarrays
JP2021047553A (ja) 文書検索装置、文書検索方法、及び、文書検索プログラム
Shetty et al. Document Retrieval Through Cover Density Ranking
CN105488114B (zh) 一种基于树形结构的排序方法
Hawas et al. Fast Regular Expression Matching in a Large Static Text
JP5664042B2 (ja) 検索装置、検索方法、検索プログラム及び検索システム

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180129

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20200129

Year of fee payment: 6