Strange case for token_set_ratio with Thai language
YosuaMichael opened this issue · 2 comments
Hi,
First of all thanks for the library! It is really helpful for various string matching task.
I use the library for various language in South East Asia and it mostly work well.
However I got some strange cases in Thai language:
fuzz.token_set_ratio('ป้ารัตน์ หน้าโรงเรียนมารีย์','ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์')
The above script somehow return 100 (perfect match), although we can clearly see that it is totally different?
Is it a bug? Or is there any explanation why it behave like that?
Thanks!
@YosuaMichael This is caused by full_process.
In this case it tries to replace non characters with whitespace. However it apparently screws up
> regex = re.compile(r"(?ui)\W")
> regex.sub(" ", 'ป้ารัตน์ หน้าโรงเรียนมารีย์')
'ป าร ตน หน าโรงเร ยนมาร ย '
> regex.sub(" ", 'ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์')
'ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย '
It does now find ย in both sequences as a single word
and therefore returns a 100% match
It works when you do not use full_process
> fuzz.token_set_ratio('ป้ารัตน์ หน้าโรงเรียนมารีย์','ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์ย์', full_process=False)
11
@maxbachmann Ah thanks a lot!
Didn't know about the param full_process=False
I guess I will use it for non-latin characters and it will fix my problems.