අන්තර්ගතයට යන්න

Python සහ JavaScript පැකේජ ​

sinhala_orthography පැකේජයේ අක්ෂර මාලාව, රෝමානුකරණ පරිවර්තකය සහ වචන සංඛ්‍යාතය අනුව නිවැරදි අක්ෂර වින්‍යාසය තෝරන මෙවලමක් ඇත. එයට Python 3.9 හෝ ඊට පසු සංස්කරණයක් අවශ්‍ය වන අතර වෙනත් පැකේජ අවශ්‍ය නැත.

ස්ථාපනය ​

ගබඩාව (repository) clone කර src/ වෙතින් import කරන්න, නැතහොත් පැකේජය ස්ථාපනය කරන්න:

sh
git clone https://github.com/SrilalS/Sinhala-Phonetic-Orthography
cd Sinhala-Phonetic-Orthography
pip install .

Windows කොන්සෝල

සිංහල පෙළ print කිරීමට පෙර PYTHONIOENCODING=utf-8 සකසන්න.

රෝමානුකරණය පරිවර්තනය කිරීම ​

python
from sinhala_orthography import to_sinhala

to_sinhala("lankaava")                  # 'ලංකාව'
to_sinhala("kruura")                    # 'කෲර'
to_sinhala("kruura", rakaransaya_u=True)  # 'ක්‍රූර'
to_sinhala("lait")                      # 'ලයිට්'
to_sinhala("akShara", classical=True)   # 'අක්‍ෂර'
to_sinhala("karma", repaya_zwj=True)    # 'කර්‍ම'

to_sinhala(source, archaic=False, repaya_zwj=False, classical=False, rakaransaya_u=False) ​

රෝම අකුරින් ලියූ වචනයක් හෝ පෙළක් සිංහල අකුරුවලට පරිවර්තනය කරයි. අනුක්‍රම වගුවල නැති අක්ෂර (හිස්තැන්, ඉලක්කම්, විරාම ලකුණු) වෙනසක් නැතිව ප්‍රතිදානයට යයි. සෑම ප්‍රතිදානයක්ම නීති මාලාවේ අනිවාර්ය නීතිවලට අනුකූලය. අනුක්‍රම තුනක් දක්වා දිග සෑම ආදානයක් සඳහාම මෙය පරීක්ෂා කර ඇත (සත්‍යාපනය බලන්න).

විකල්පයබලපෑමසම්මුතිය
archaicඏ ඐ ෟ ෳ, තනි ඎ, ඁ, ඦ සහ ස්පර්ශ අකුරු සඳහා ඉඩ දෙයිR-14
repaya_zwjරේඵය සාමාන්‍ය ර් + C වෙනුවට ර්‍ + C ලෙස ලියයිR-08
classicalසම්භාව්‍ය බැඳි අකුරු යුගල සඳහා ZWJ සංයුක්ත අකුරු යොදයි, සහ ම න ල ට පසු රකාරාංශයR-07, R-10
rakaransaya_uC + r + u/uu, සුලබ C + ෘ/ෲ (කෲර) වෙනුවට රකාරාංශය + ු/ූ (ක්‍රූර) ලෙස ලියයි. නමේ තේරුම "රකාරාංශය + u" ය: u යනු ු පිල්ලයි (JavaScript හි rakaransayaU). රකාරාංශය සෑම විටම ක්‍රියාත්මකය; වෙනස් වන්නේ ru / ruu පමණිR-06
retroflex_dd යතුරෙන් ඩ ද, dh යතුරෙන් ද ද ලියයි (D ඪ, Dh ධ). මෙය පැරණි යතුරුපුවරු සම්මුතියයිR-01

transliterate() යනු එම ශ්‍රිතයම, එහි මුල් නමින්ය. අනුක්‍රම වගු src/sinhala_orthography/data/ හි (consonants.json, vowels.json, specials.json) ඇති අතර, රෝමානුකරණයේ පිරිවිතර 07 · ශබ්දානුසාරී රෝමානුකරණය හි ඇත. අත්හදා බැලීමේ පිටුවෙන් එය උත්සාහ කරන්න.

වචන ලැයිස්තුවක් භාවිතයෙන් නිවැරදි අක්ෂර වින්‍යාසය තේරීම ​

අකුරු කාණ්ඩ 14 ක් පමණ එක ලෙස උච්චාරණය වේ (G-SP-01). එබැවින් එක් රෝමානු ආදානයකින් සෑම විටම සම්මත අක්ෂර වින්‍යාසය තෝරාගත නොහැක. Lexicon වචන සංඛ්‍යාත ලැයිස්තුවක් ශබ්ද යතුර (sound key) අනුව සුචිගත කරයි. candidates() ආදානයට සමාන ශබ්ද යතුරක් ඇති වචන ශ්‍රේණිගත කරයි.

python
from sinhala_orthography import Lexicon, candidates

lex = Lexicon("word-frequency-list.tsv")   # one "word<TAB>count" per line
candidates(lex, "honda")                   # ['හොඳ', ...]
candidates(lex, "hon", partial=True)       # completions of a word prefix
ශ්‍රිතයප්‍රතිදානය
candidates(lex, roman, limit=5, partial=False, **options)ශ්‍රේණිගත අක්ෂර වින්‍යාස. පරිවර්තකයේම අක්ෂර වින්‍යාසය සෑම විටම ඇතුළත්ය. රෝමානු ආදානයේ පැහැදිලි සලකුණක් (ලොකු අකුරක්, z උපසර්ගයක්, දෙගුණ කළ ස්වරයක් …) ඇති විට සහ එම අක්ෂර වින්‍යාසය වචනයක් නම්, එය පළමුව එයි
sound_key(text)එක ලෙස ඇසෙන අක්ෂර වින්‍යාස ගැළපෙන සේ සරල කළ පෙළ: මහාප්‍රාණ → අල්පප්‍රාණ, ණ → න, ළ → ල, ශ/ෂ → ස, ස්වර දිග ඉවත් කර, සඤ්ඤක → නාසිකය + ස්පර්ශය. sound_key("හොඳ") හි අගය 'හොන්ද' ය
restyle(word, **options)පරිවර්තක විකල්පවල ආකාරයට වචනයක් (rakaransaya_u සමඟ කෲර වෙනුවට ක්‍රූර …). candidates() එය යොදන නිසා වචන ලැයිස්තුව කිසි විටෙක විකල්පයක් අහෝසි නොකරයි
normalize(word)ZWJ ඉවත් වූ වචන ලැයිස්තු සඳහා, C ් ය සහ C ් ර හි අනිවාර්ය ZWJ නැවත යොදයි (ර ට පසු කිසි විටෙක නොයොදයි)
Lexicon(path).count (වචනය → සංඛ්‍යාතය), .exact(key), .prefix(key, limit=200)

07 හි ඇගයීම සඳහා මොරටුව විශ්වවිද්‍යාලයේ NLPC Word Frequency List for Sinhala භාවිත කළේය. එය මෙම ගබඩාව සමඟ නැවත බෙදා හරින්නේ නැත.

අක්ෂර මාලාව ​

python
from sinhala_orthography import VOWELS, CONSONANTS, SIGNS, entries

len(entries())   # 923
entries()[30]    # {'id': 'ka.ru', 'kind': 'syllable', 'text': 'කෘ', 'consonant': 'ka',
                 #  'vowel': 'ru', 'codepoints': ['U+0D9A', 'U+0DD8']}
නමඅන්තර්ගතය
VOWELSහල් ලකුණ, ආවේණික අ සහ පිලි 17 සඳහා (id, ස්වතන්ත්‍ර අකුර, පිල්ල)
CONSONANTSයුනිකේත අනුපිළිවෙළින් ව්‍යඤ්ජන 41 සඳහා (id, අකුර)
SIGNSං ඃ ඁ
entries()data/letters.json හි මෙන්, සෑම අකුරු රූපයක්ම

JavaScript සහ TypeScript ​

මෙම පැකේජයම JavaScript සහ TypeScript සඳහාද ඇත. එය Node.js හි සහ බ්‍රවුසරයේ ක්‍රියා කරන අතර වෙනත් පැකේජ අවශ්‍ය නැත. එය js/ හි ඇති අතර එකම අනුක්‍රම වගු භාවිත කරයි. ආදාන 50,000 කට වැඩි ගණනක් සඳහා එහි ප්‍රතිදානය Python ප්‍රතිදානයට හරියටම සමාන බව ස්වයංක්‍රීය පරීක්ෂණයක් තහවුරු කරයි. අත්හදා බැලීමේ පිටුව ක්‍රියා කරන්නේද මෙම පැකේජයෙනි. එය npm හි sinhala-orthography ලෙස ප්‍රකාශයට පත් කර ඇත:

sh
npm install sinhala-orthography
js
import { toSinhala, Lexicon, candidates } from "sinhala-orthography";

toSinhala("kruura");                          // 'කෲර'
toSinhala("kruura", { rakaransayaU: true });  // 'ක්‍රූර'
const lex = new Lexicon(wordListText);        // "word<TAB>count" lines, or [word, count] pairs
candidates(lex, "honda", { limit: 5 });
PythonJavaScript
to_sinhala(s, repaya_zwj=True)toSinhala(s, { repayaZwj: true }) (archaic, classical, rakaransayaU, retroflexD ද)
Lexicon(path)new Lexicon(text) හෝ new Lexicon(pairs): ගොනු කියවන්නේ නැති නිසා බ්‍රවුසරයේද ක්‍රියා කරයි
candidates(lex, roman, limit=5, partial=False)candidates(lex, roman, { limit, partial })
sound_key, normalize, entries, VOWELS, CONSONANTS, SIGNSsoundKey, normalize, entries, VOWELS, CONSONANTS, SIGNS

යොමුව තවමත් Python පැකේජයයි: මුලින් එය වෙනස් කර, python tools/build_js_golden.py ධාවනය කර, ඉන්පසු js/ හි npm test සාර්ථක කරන්න.

මෙවලම් ​

sh
python tools/build_data.py            # data/letters.json, data/validity.json
python tools/check_romanization.py    # coverage + exhaustive safety (about 20 s)
python tools/build_spec_tables.py     # tables in docs/07
python tools/check_translations.py    # Sinhala translations whose English source changed
python -m unittest discover tests     # set SINHALA_WORD_LIST to also run the lexicon tests

පෙළ සහ කේතය MIT බලපත්‍රය යටතේ නිකුත් කර ඇත. උපුටා දක්වන්න: doi:10.5281/zenodo.23244126.