【问题标题】:How do I find strings that only differ by their diacritics?如何找到仅因变音符号不同的字符串?
【发布时间】:2015-03-18 01:53:29
【问题描述】:

我正在比较三种词汇资源。我使用其中一个词条来创建查询——参见第一列——并查看其他两个词典是否返回正确的答案。所有错误答案都写入文本文件。这是 3000 行中的一个示例:

réincarcérer<IND><FUT><REL><SG><1>  réincarcèrerais réincarcérerais réincarcérerais
réinsérer<IND><FUT><ABS><PL><1> réinsèrerons    réinsérerons    réinsérerons
macérer<IND><FUT><ABS><PL><3>   macèreront  macéreront  macéreront
répéter<IND><FUT><ABS><PL><1>   répèterons  répéterons  répéterons

第一列是查询,第二列是参考。第三和第四列是词典返回的结果。这些值是制表符分隔的。

我正在尝试找出仅通过变音符号与参考文献不同的答案。也就是说,répèterons répéterons 应该匹配,因为两者之间的唯一区别是第二部分在 e 上具有重音而不是重音。

我想匹配整行。我会很感激一个正则表达式,它也可以识别出不同的答案 - 以下两行应该匹配,因为 martellerait 有两个 ls 而martèlerait 只有一个。

modeler<IND><FUT><ABS><SG><2>   modelleras  modèleras   modèleras
marteler<IND><FUT><REL><SG><3>  martellerait    martèlerait martèlerait

最后两个值总是相同的。您可以专注于值 #2 和 3。

【问题讨论】:

    标签: regex diacritics


    【解决方案1】:

    第一部分可以通过对 ASCII 进行有损转换,然后进行直接字符串比较来实现。请注意,转换为 ASCII 会有效地删除变音符号。

    使用正则表达式模式是不可能的(据我所知)。您需要对 Levenshtein 距离等问题进行一些研究。

    编辑:

    此正则表达式将匹配重复的辅音。它可能对您的宝石问题有所帮助。

    ([b-df-hj-np-tv-xz])\\1+
    

    这意味着:

    ([b-df-hj-np-tv-xz])  # Match only consonants
    \\1+                  # Match one or times again what was captured in the first capture group
    

    【讨论】:

    • 好呼吁转换为 ASCII。我不确定 Levenshtein 距离是否适合于此,尽管我可能会得到所有距离为 1 的对并手动通过它们。感谢您的意见!
    • 谢谢 Paul,我明天下午试试!
    猜你喜欢
    • 2012-05-10
    • 2021-12-11
    • 1970-01-01
    • 2019-09-17
    • 2013-12-23
    • 2010-09-19
    • 2012-12-10
    • 2017-11-18
    相关资源
    最近更新 更多