2.X/3. Dealing with Human Language

3. Dealing with Human Language

drscg 2017. 9. 24. 17:59


"I know all those words, but that sentence makes no sense to me."

"나는 저 단어 모두를 알고 있다. 하지만 저 문장은 내 상식으로는 이해가 가지 않는다."

 
 -- Matt Groening

Full-text search is a battle between precision—returning as few irrelevant documents as possible—and recall—returning as many relevant documents as possible. While matching only the exact words that the user has queried would be precise, it is not enough. We would miss out on many documents that the user would consider to be relevant. Instead, we need to spread the net wider, to also search for words that are not exactly the same as the original but are related.

full-text 검색은 정확성(precision, 관련 없는 document를 가능한 한 적게 반환하는)과 recall(적합한 document를 가능한 한 많이 반환하는) 사이의 전쟁이다. 사용자가 검색한 단어에 정확히 일치하는 것이 정확한 것이지만, 그것으로 충분하지 않다. 사용자가 관련 있을 거라 생각하는 많은 document를 놓치게 될 것이다. 대신, 정확하게 원본과 동일하지는 않지만, 관련 있는 단어도 검색하기 위해, 검색 범위를 더 넓힐 필요가 있다.

Wouldn’t you expect a search for "quick brown fox" to match a document containing "fast brown foxes", "Johnny Walker" to match "Johnnie Walker", or "Arnolt Schwarzenneger" to match "Arnold Schwarzenegger"?

"quick brown fox" 에 대한 검색은 "fast brown foxes" 를 포함하는 document에 일치하고, "Johnny Walker" 는 "Johnnie Walker" 에 일치하고, "Arnolt Schwarzenneger" 는 "Arnold Schwarzenegger" 에 일치하기를 기대하지 않겠는가?

If documents exist that do contain exactly what the user has queried, those documents should appear at the top of the result set, but weaker matches can be included further down the list. If no documents match exactly, at least we can show the user potential matches; they may even be what the user originally intended!

사용자가 검색한 것을 정확히 포함하는 document가 존재한다면, 해당 document는 결과 집합의 상단에 나타나야 한다. 그러나, 덜 일치하는 document는 목록의 더 아래에 포함될 수 있다. 만약, 정확히 일치하는 document가 없다면, 사용자에게 최소한 일치할 가능성이 있는 document를 보여줄 수 있다. 이것이 사용자가 원래 의도한 것일 수도 있다.

There are several lines of attack:

몇 가지 공략 지점이 있다.

  • Remove diacritics like ´^, and ¨ so that a search for rôle will also match role, and vice versa. See Normalizing Tokens.

    rôle 에 대한 검색은 role 과도 일치하고, 그 반대도 마찬가지이기 위해, ´^ 그리고 ¨ 같은 발음 구별 부호를 제거한다. Normalizing Tokens를 참고하자.

  • Remove the distinction between singular and plural—fox versus foxes—or between tenses—jumping versus jumped versus jumps—by stemming each word to its root form. See Reducing Words to Their Root Form.

    각 단어의 형태소를 분석 하여, 원형으로 만들어, foxfoxes 같은 단수와 복수, jumpingjumpedjumps 같이 다른 시제(현재/과거/미래)의 구분을 제거한다. Reducing Words to Their Root Form을 참고하자.

  • Remove commonly used words or stopwords like theand, and or to improve search performance. See Stopwords: Performance Versus Precision.

    검색 성능을 향상시키기 위해, theandor 같이 흔히 쓰이는 단어나 불용어(stopwords) 를 제거한다. Stopwords: Performance Versus Precision을 참고하자.

  • Including synonyms so that a query for quick could also match fast, or UK could match United Kingdom. See Synonyms.

    quick 에 대한 query가 fast 에도 일치하거나, UK 가 United Kingdom 에 일치하도록 하기 위해 동의어를 포함한다. Synonyms을 참고하자.

  • Check for misspellings or alternate spellings, or match on homophones—words that sound the same, like their versus theremeat versus meet versus mete. See Typoes and Mispelings.

    맞춤법 오류나 대체 철자, 동음 이의어(homophones, their 와 theremeatmeet 와 mete 같이 동일하게 소리 나는 단어)를 확인한다. Typoes and Mispelings을 참고하자.

Before we can manipulate individual words, we need to divide text into words, which means that we need to know what constitutes a word. We will tackle this in Identifying Words.

개별 단어를 다루기 전에, 텍스트를 단어로 나누어야 한다. 즉, 어떤 것을 단어(word) 로 판단해야 할지 알아야 한다. Identifying Words에서 살펴보자.

But first, let’s take a look at how to get started quickly and easily.

우선, 빠르고 쉽게 시작할 수 있는 방법을 살펴보자.