Fix tone_detector and sound_syllable bugs for Thai syllables (fixes #1055 and #1176) - #1197
Conversation
…w consonants Co-authored-by: wannaphong <8536487+wannaphong@users.noreply.github.com>
|
@copilot Add all to test set A list of all fails for functions: 53 อีก UNKNOWN_tone |
Co-authored-by: wannaphong <8536487+wannaphong@users.noreply.github.com>
|
Issue #1055 is already fixed by this PR:
Both test cases are included in the test suite (lines 727 and 692 of test_util.py) and pass successfully. Warning Firewall rules blocked me from connecting to one or more addresses (expand for details)I tried to connect to the following addresses, but was blocked by firewall rules:
If you need me to access, download, or install something from one of these locations, you can either:
|
|
@copilot Can you fix ruff? |
…lines Co-authored-by: wannaphong <8536487+wannaphong@users.noreply.github.com>
|



Fix thai_word_tone_detector bug
_check_sonorant_syllableto handle empty sonorant liststone_detectorlogic to properly handle syllables without sonorantssound_syllableto handle syllables with only อ (no other consonants)Summary
Fixed 4 root causes in
pythainlp/util/syllable.pythat caused syllables to return "UNKNOWN_tone" and also resolved issue #1055:_check_sonorant_syllable- added empty list checktone_detector- restructured if-elif to independent if statementssound_syllableTest Coverage
Examples Fixed
Original prompt
This section details on the original issue you should resolve
<issue_title>bug: thai_word_tone_detector</issue_title>
<issue_description>### Description
Traceback (most recent call last):
File "/mnt/c/Users/gpr_y/Documents/_z__py4nux/nlp/thainlp/tone_quant.py", line 32, in
print(thai_word_tone_detector('อีก'))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/geebee/anaconda3/lib/python3.11/site-packages/pythainlp/util/thai.py", line 200, in thai_word_tone_detector
return [(i, tone_detector(i.replace("หฺ", "ห"))) for i in _pronunciate]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/geebee/anaconda3/lib/python3.11/site-packages/pythainlp/util/thai.py", line 200, in
return [(i, tone_detector(i.replace("หฺ", "ห"))) for i in _pronunciate]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/geebee/anaconda3/lib/python3.11/site-packages/pythainlp/util/syllable.py", line 282, in tone_detector
consonant_ending = _check_sonorant_syllable(syllable)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/geebee/anaconda3/lib/python3.11/site-packages/pythainlp/util/syllable.py", line 234, in _check_sonorant_syllable
if _sonorant[-1] == consonants[-2]:
~~~~~~~~~^^^^
IndexError: list index out of range
(base)
Expected results
l, m, h, r, f or empty
note that for other words it works as expected in my code
Current results
see stacktrace in description
Steps to reproduce
thai_word_tone_detector('อีก')
PyThaiNLP version
pythainlp-5.1.2
Python version
Python 3.11.7
Operating system and version
Ubuntu 20.04.6 LTS (on wsl2)
More info
No response
Possible solution
No response
Files
No response</issue_description>
<agent_instructions>Fix bug follow the test:
A list of all fails for functions:
thai_word_tone_detector and
tone_detector on syllables
sound_syllable on syllables
on my sample of 4000 words
53 อีก UNKNOWN_tone
--- อีก 54.1 อีก ['ออ', 'กอ', 'อี', 'อีก'] False mid UNKNOWN_tone dead long close
57 ออก UNKNOWN_tone
--- ออก 58.1 ออก ['ออ', 'ออ', 'กอ', 'ออก'] False mid UNKNOWN_tone dead long close
72 หาก UNKNOWN_tone
--- หาก 73.1 หาก ['หอ', 'กอ', 'อา', 'หาก'] False high UNKNOWN_tone dead long close
86 อาจ UNKNOWN_tone
--- อาจ 87.1 อาจ ['ออ', 'จอ', 'อา', 'อาจ'] False mid UNKNOWN_tone dead long close
--- ใหญ่ 101.1 ใหญ่ ['หอ', 'ญอ', 'ใอ', 'ไม้เอก', 'ใหญ่'] True high UNKNOWN_tone live long close
117 เอา UNKNOWN_tone
--- เอา 118.1 เอา ['ออ', 'เอา', 'เอา'] False mid UNKNOWN_tone UNKNOWN_livedead long open
--- เอง 130.1 เอง ['ออ', 'งอ', 'เอ', 'เอง'] False mid UNKNOWN_tone live long close
135 อะไร UNKNOWN_tone
--- อะไร 136.1 อะ ['ออ', 'อะ', 'อะ'] False mid UNKNOWN_tone UNKNOWN_livedead short open
--- เธอ 187.1 เธอ ['ธอ', 'เออ', 'เธอ'] False low_flat UNKNOWN_tone dead long open
--- ตัวเอง 191.2 เอง ['ออ', 'งอ', 'เอ', 'เอง'] False mid UNKNOWN_tone live long close
199 อาหาร UNKNOWN_tone
--- อาหาร 200.1 อา ['ออ', 'อา', 'อา'] False mid UNKNOWN_tone UNKNOWN_livedead long open
--- พอ 204.1 พอ ['พอ', 'ออ', 'พอ'] False low_flat UNKNOWN_tone dead long open
213 โอกาส UNKNOWN_tone
--- โอกาส 214.1 โอ ['ออ', 'โอ', 'โอ'] False mid UNKNOWN_tone UNKNOWN_livedead long open
302 อายุ UNKNOWN_tone
--- อายุ 303.1 อา ['ออ', 'อา', 'อา'] False mid UNKNOWN_tone UNKNOWN_livedead long open
352 อำเภอ UNKNOWN_tone
--- อำเภอ 353.1 อำ ['ออ', 'อำ', 'อำ'] False mid UNKNOWN_tone UNKNOWN_livedead long open
--- อำเภอ 353.2 เภอ ['ภอ', 'เออ', 'เภอ'] False low_flat UNKNOWN_tone dead long open
353 เหตุ UNKNOWN_tone
--- เหตุ 354.1 เหตุ ['หอ', 'ตอ', 'เอ', 'อุ', 'เหตุ'] False high UNKNOWN_tone dead short close
368 อารมณ์ UNKNOWN_tone
--- อารมณ์ 369.1 อา ['ออ', 'อา', 'อา'] False mid UNKNOWN_tone UNKNOWN_livedead long open
--- ผู้ใหญ่ 370.2 ใหญ่ ['หอ', 'ญอ', 'ใอ', 'ไม้เอก', 'ใหญ่'] True high UNKNOWN_tone live long close
--- ตนเอง 378.2 เอง ['ออ', 'งอ', 'เอ', 'เอง'] False mid UNKNOWN_tone live long close
393 อำนาจ UNKNOWN_tone
--- อำนาจ 394.1 อำ ['ออ', 'อำ', 'อำ'] False mid UNKNOWN_tone UNKNOWN_livedead long open
--- ส่วนใหญ่ 404.2 ใหญ่ ['หอ', 'ญอ', 'ใอ', 'ไม้เอก', 'ใหญ่'] True high UNKNOWN_tone live long close
--- เหตุผล 410.1 เหตุ ['หอ', 'ตอ', 'เอ', 'อุ', 'เหตุ'] False high UNKNOWN_tone dead short close
423 อาศัย UNKNOWN_tone
--- อาศัย 424.1 อา ['ออ', 'อา', 'อา'] False mid UNKNOWN_tone UNKNOWN_livedead long open
436 อากาศ UNKNOWN_tone
--- อากาศ 437.1 อา ['ออ', 'อา', 'อา'] False mid UNKNOWN_tone UNKNOWN_livedead long open
440 เหตุการณ์ UNKNOWN_tone
--- เหตุการณ์ 441.1 เหตุ ['หอ', 'ตอ', 'เอ', 'อุ', 'เหตุ'] False high UNKNOWN_tone dead short close
469 อา UNKNOWN_tone
--- อา 470.1 อา ['ออ', 'อา', 'อา'] False mid UNKNOWN_tone UNKNOWN_livedead long open
--- พอใจ 497.1 พอ ['พอ', 'ออ', 'พอ'] False low_flat UNKNOWN_tone dead long open
--- กันเอง 509.2 เอง ['ออ', 'งอ', 'เอ', 'เอง'] False mid UNKNOWN_tone live long close
520 อาจารย์ UNKNOWN_tone
--- อาจารย์ 521.1 อา ['ออ', 'อา', 'อา'] ...
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.