프랑스어 검색 처리 관련 'œ'와 'æ' 특수 문자 처리 개선 제안

일부 프랑스어 단어에는 다음 문자가 사용됩니다:

  • Œ, œ: œuf(달걀)이나 cœur(심장), œuvre(번역과 의미가 다양하여 여기서 자세히 설명하지 않겠습니다. 중요하지 않으므로)에 사용되듯이, 등.
  • Æ, æ: nævus(피부 위의 점(동물이 아닌)을 가리키는 과학 용어)이나 다른 단어에 사용되듯이.

æ는 거의 사용되지 않습니다(라틴어에서 유래한 과학/의학 용어인 것 같습니다), 하지만 œ는 프랑스어에서 꽤 많이 사용됩니다.

불행히도, 이러한 특수 문자는 프랑스어 키보드 레이아웃에 존재하지 않으며 많은 사람들이 단순히 “oe” 또는 "ae"로 대신 작성합니다.
하지만 일부 사용자는 커스텀 레이아웃을 사용하거나, 스마트폰의 자동 수정 기능이나 기타 작성 지원 시스템이 올바른 "병합 문자"로 단어를 자동으로 수정하는 경우가 많습니다. 예를 들어 “oeuvre” → "œuvre"처럼요.

현재 검색은 "oe"와 "œ"를 서로 다른 문자열로 처리하여, 동일해야 할 결과가 다르게 표시됩니다.

예시:
https://forum.monocycle.info/search?q=coeur
https://forum.monocycle.info/search?q=cœur

제 제안은 "oe"와 “œ”, "OE"와 "Œ"가 동일한 문자열로 처리되어야 한다는 것입니다. 또한 "ae"와 “æ”, "AE"와 "Æ"도 마찬가지입니다.

9개의 좋아요

매우 흥미로운 문제네요. @zogstrip / @j.jaffeux, 어떻게 생각하시나요? 사이트 설정 뒤에 정규화기를 추가할 수 있을 것 같습니다.

3개의 좋아요
SELECT to_tsvector('french', E'Cette oeuvre d\'art n\'est pas une œuvre.');
            to_tsvector             
------------------------------------
 'art':4 'cet':1 'oeuvr':2 'œuvr':9
(1 row)

어떤 이유에서인지, 검색을 다룰 때 diakritik(발음 구별 부호), ligature(이중 문자) 등을 처리하는 문제는 이미 해결된 것이라고 생각했습니다… 그렇지 않나요? :man_shrugging:

:fr: 국적자로서 저는 이를 확실히 지지합니다. postgresql의 unaccent를 사용할 수 있을 것 같은데, 이는 발음 구별 부호를 제거하고 일반적인 이중 문자도 처리합니다.

SELECT to_tsvector('french', unaccent('œuvre poêle œuf Noël électroencéphalogramme æ Æ'));
                               to_tsvector                               
-------------------------------------------------------------------------
 'ae':6,7 'electroencephalogramm':5 'noel':4 'oeuf':3 'oeuvr':1 'poel':2
(1 row)
4개의 좋아요

프랑스인으로서, 저처럼 이(흥미롭긴 하지만) 쓸모없는 복잡성을 싫어하나요? :smile:
약간의 오프토픽 유머를 양해해 주세요

4개의 좋아요

search_ignore_accents 구현을 단순히 unaccent를 사용하도록 수정하는 것이 좋다고 생각하시나요, 아니면 완전히 새로운 설정이 필요할까요?

어차피 PG(PostgreSQL)가 그렇게 처리하고 있어서, accent 무시 기능을 구현하는 방식을 그대로 바꾸는 쪽을 개인적으로 선호합니다.

3개의 좋아요

좋은 질문입니다 :thinking:

:fr:에서는 분명히 작동할 것 같지만, 예상대로 작동하지 않을 수 있는 다른 로케일도 있을까요?

/usr/share/postgresql/13/tsearch_data/unaccent.rules 파일을 살펴본 결과, 꽤 안전해 보입니다.

search_ignore_accents 설정을 postgresql의 unaccent를 사용하도록 전환하는 것을 분명히 지지합니다 :+1:

@nbianca 이 내용을 목록에 추가해 주시겠어요?

3개의 좋아요

이 PR에서 기존 Ruby 구현을 Postgresql의 unaccent로 대체했습니다:

5개의 좋아요

이 주제는 3일 후 자동으로 닫혔습니다. 더 이상 새로운 답변을 게시할 수 없습니다.