Canapin
(Coin-coin le Canapin)
1
一些法语单词使用以下字符:
- Œ, œ,例如在 œ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 个赞
sam
(Sam Saffron)
2
@zogstrip / @j.jaffeux 这是一个非常有趣的问题,您怎么看?我们可以添加一个由站点设置支持的 normalizer。
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)
出于某些原因,我认为处理重音符号、连字等是搜索中已解决的问题……我猜不是?
作为一个
,我绝对支持这一点。看起来我们可以使用 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 个赞
Canapin
(Coin-coin le Canapin)
4
而且作为一个法国人,你是否和我一样讨厌这种(虽然有趣但却)无用的语言复杂性? 
抱歉,有点离题的幽默
4 个赞
sam
(Sam Saffron)
5
您认为我们应该直接修改 search_ignore_accents 的实现以使用 unaccent,还是需要一个全新的设置?
我比较倾向于直接更改忽略重音的实现,因为这与 PG 的做法保持一致。
3 个赞
nbianca
(Bianca)
7
我在这个 PR 中用 Postgresql 的 unaccent 替换了我们旧的 Ruby 实现:
5 个赞