The example we showed in Formatting Synonyms, used u s a
as a synonym. Why did we use that instead of U.S.A.
? The reason is that the synonym
token filter sees only the terms that the previous token filter or tokenizer has emitted.
Formatting Synonyms에서 보여준 예제에서, 동의어로서 u s a
를 사용했다. 왜 U.S.A.
대신 저것을 사용했을까? 그 이유는 synonym
token filter 만이 직전의 token filter나 tokenizer가 출력한 단어를 알기 때문이다.
Imagine that we have an analyzer that consists of the standard
tokenizer, with the lowercase
token filter followed by a synonym
token filter. The analysis process for the text U.S.A.
would look like this:
lowercase
token filter 다음에 synonym
token filter를 가진, standard
analyzer로 구성된 analyzer를 가지고 있다고 가정해 보자. U.S.A.
에 대한 분석 프로세스는 아래와 같다.
original string → "U.S.A." standard tokenizer → (U),(S),(A) lowercase token filter → (u),(s),(a) synonym token filter → (usa)
If we had specified the synonym as U.S.A.
, it would never match anything because, by the time my_synonym_filter
sees the terms, the periods have been removed and the letters have been lowercased.
U.S.A.
를 동의어로 지정했다면, period(.)는 제거되고, 소문자로 변경되었기 때문에, my_synonym_filter
가 단어를 확인할 때까지, 아무것도 일치하지 않을 것이다.
This is an important point to consider. What if we want to combine synonyms with stemming, so that jumps
, jumped
, jump
, leaps
, leaped
, and leap
are all indexed as the single term jump
? We could place the synonyms filter before the stemmer and list all inflections:
이것은 고려해야 할 중요한 포인트이다. jumps
, jumped
, jump
, leaps
, leaped
그리고 leap
모두를 하나의 단어 jump
로 색인 하기 위해, 동의어와 형태소 분석을 조합해야 한다면 어떻게 해야 할까? 형태소 분석기 이전에 synonyms filter를 배치하고, 모든 변형된 단어를 나열할 수 있다.
"jumps,jumped,leap,leaps,leaped => jump"
But the more concise way would be to place the synonyms filter after the stemmer, and to list just the root words that would be emitted by the stemmer:
그러나, 더 간결한 방법은 형태소 분석기 다음에 synonyms filter를 배치하는 것이다. 그리고 형태소 분석기에 의해 출력될 원형만을 나열하는 것이다.
"leap => jump"
Case-Sensitive Synonymsedit
Normally, synonym filters are placed after the lowercase
token filter and so all synonyms are written in lowercase, but sometimes that can lead to odd conflations. For instance, a CAT
scan and a cat
are quite different, as are PET
(positron emission tomography) and a pet
. For that matter, the surname Little
is distinct from the adjective little
(although if a sentence starts with the adjective, it will be uppercased anyway).
보통, synonym filter는 lowercase
token filter 다음에 배치된다. 그리고, 모든 동의어는 소문자로 쓴다. 그러나, 가끔씩 그것이 이상한 혼란을 초래할 수 있다. 예를 들어, CAT
scan(CT 촬영, 컴퓨터 엑스선 체축(體軸) 단층 촬영)과 cat
은, PET
(양전자 방사 단층 촬영)과 pet
처럼, 완전히 다르다. 마찬가지로, 성(姓) Little
과 형용사 little
(형용사로 시작하는 문장이라면, 대문자일 것이다)은 완전히 다르다.
If you need use case to distinguish between word senses, you will need to place your synonym filter before the lowercase
filter. Of course, that means that your synonym rules would need to list all of the case variations that you want to match (for example, Little,LITTLE,little
).
단어의 의미를 구분하는 사용 사례가 필요하다면, synonym filter를 lowercase
filter 이전에 배치해야 한다. 즉, 동의어 규칙은 일치하려는 다양한 경우 모두를 나열해야 한다. (예: Little,LITTLE,little
)
Instead of that, you could have two synonym filters: one to catch the case-sensitive synonyms and one for all the case-insensitive synonyms. For instance, the case-sensitive rules could look like this:
그 대신, 2개의 synonym filter를 가질 수 있다. 하나는 대소문자를 구분하여 동의어를 찾고, 다른 하나는 대소문자 구분 없는 동의어 모두에 대한 것이다. 예를 들어, 대소문자를 구분하는 규칙은 아래와 같다.
"CAT,CAT scan => cat_scan" "PET,PET scan => pet_scan" "Johnny Little,J Little => johnny_little" "Johnny Small,J Small => johnny_small"
And the case-insensitive rules could look like this:
그리고, 대소문자 구분 없는 규칙은 아래와 같다.
"cat => cat,pet" "dog => dog,pet" "cat scan,cat_scan scan => cat_scan" "pet scan,pet_scan scan => pet_scan" "little,small"
The case-sensitive rules would CAT scan
but would match only the CAT
in CAT scan
. For this reason, we have the odd-looking rule cat_scan scan
in the case-insensitive list to catch bad replacements.
대소문자를 구분하는 규칙은 CAT scan
이지만, CAT scan
에 있는 CAT
에만 일치할 것이다. 이런 이유때문에, 대소문자 구분 없는 규칙 목록에서, 잘못된 대체를 수정하기 위해, 이상하게 보이는 규칙 cat_scan scan
을 가지고 있다.
You can see how quickly it can get complicated. As always, the analyze
API is your friend—use it to check that your analyzers are configured correctly. See Testing Analyzers.
무척 빠르게 복잡해진다. analyze
API는 언제나 여러분의 친구이다. analyzer가 올바르게 설정되었는지 확인하기 위해, analyze
API를 사용해 확인하자. Testing Analyzers를 참조하자.
'2.X > 3. Dealing with Human Language' 카테고리의 다른 글
3-6-2. Formatting Synonyms (0) | 2017.09.24 |
---|---|
3-6-3. Expand or contract (0) | 2017.09.24 |
3-6-5. Multiword Synonyms and Phrase Queries (0) | 2017.09.24 |
3-6-6. Symbol Synonyms (0) | 2017.09.24 |
3-7. Typoes and Mispelings (0) | 2017.09.24 |