PYKAKASI(1)
๐ PYKAKASI ๐
okay bestie, welcome to pykakasi(1) โ section 1 of the manual, and no I'm not kidding, this thing has lore. Pull up a chair, we're doing this properly.
โจ NAME โจ
pykakasi โ pykakasi Documentation
This is the documentation for the Pykakasi library and utility. pykakasi is a library and a utility that implements KAKASI functionality in Python. KAKASI was originally built to convert Japanese text to roman form.
pykakasi is a free software, and available on GitHub project. ๐ซถ
wakati is an implementation of kakasi's wakati gaki option.
Here's the lil map of everything in the docs, so you know where you're going:
- Command Line Options โ command line options
- Programming Interface โ application programming interface and options
- Pykakasi authors โ PyKAKASI authors and credits
- Copyright and License โ copyright and license
- Table of contents โ access to all of document contents
- Glossary โ glossary of Japanese linguistic terms
๐ SUPPORTED PYTHON VERSIONS ๐
Pykakasi supports python 2.7, python 3.5, 3.6, 3.7, 3.8 and PyPy.
It may work with python 2.6, 3.3, 3.4 and pypy3 but these are not tested now. read: don't come crying to us ๐
๐ฆ DEPENDENCY ๐ฆ
It depends on klepto for providing a mapping database.
๐ธ ABOUT KAKASI ๐ธ
KAKASI is the language processing filter to convert Kanji characters to Hiragana, Katakana or Romaji [2] and may be helpful to read Japanese documents.
The name "KAKASI" is the abbreviation of "kanji kana simple inverter" and the inverse of SKK "simple kana kanji converter" which is developed by Masahiko Sato at Tohoku University. The most entries of the kakasi dictionary is derived form the SKK dictionaries. If you have some interests in the naming of "KAKASI", please consult to Japanese-English dictionary. :-)
not the :-) in a manpage, I'm deceased, that's iconic ๐ญ
ยฉ๏ธ COPYRIGHT AND LICENSE ยฉ๏ธ
Copyright 2010-2019 Hiroshi Miura <miurahr@linux.com>
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>.
๐ป PROGRAMMING INTERFACE ๐ป
Conversion Usage
convert method
convert returns result as dictionary. There are keys: 'orig', 'kana', 'hira', 'hepburn', 'kunrei', 'passport' โจ
Example:
kks = pykakasi.kakasi()
text = 'ใใชๆผขๅญ'
result = kks.convert(text)
for item in result:
print("{}: kana '{}', hiragana '{}', romaji: '{}'".format(item['orig'], item['kana'], item['hira'], item['hepburn']))
ใใช: kana 'ใซใ', hiragana: 'ใใช', romaji: 'kana'
ๆผขๅญ: kana 'ใซใณใธ', hiragana: 'ใใใ', romaji: 'kanji'
Old API (v1.2)
โ ๏ธ WARNING: The OLD v1.2 API,wakaticlass, andsetMode(),getConverter()anddo()functions, will be deprecated when v3.0 released. Please consider to useconvert()method.
like bestie, it's giving legacy. move on. ๐
Conversion Options
These switch alphabets are derived from original Kakasi. Now it support following options:
Kโ Katakana conversion โ values:a,H,Noneโ note: roman, Hiragana or non conversionHโ Hiragana conversion โ values:a,K,Noneโ note: roman, Katakana or non conversionJโ Kanji conversion โ values:a,H,K,Noneโ note: roman or Hiragana, Katakana or noconvaโ Roman conversion โ values:E,Noneโ note: JIS ROMAN or non conversionEโ JIS ROMAN conversion โ values:a,Noneโ note: ascii roman or non conversion
Each character means character sets as follows:
Character Sets
a: ascii j: jisroman g: graphic k: kana
(j,k defined in jisx0201)
E: kigou K: katakana H: hiragana J: kanji
(E,K,H,J defined in jisx0208)
API usage example
How to Install:
pip install pykakasi
Building library, setup script build dictionary db file and generate pickled db files. Without dictionary files, a library fails to run. no dict, no vibes. ๐ซ
Sample source code:
from pykakasi import kakasi,wakati
text = u"ใใชๆผขๅญไบคใใๆ"
kakasi = kakasi()
kakasi.setMode("H","a") # Hiragana to ascii, default: no conversion
kakasi.setMode("K","a") # Katakana to ascii, default: no conversion
kakasi.setMode("J","a") # Japanese to ascii, default: no conversion
kakasi.setMode("r","Hepburn") # default: use Hepburn Roman table
kakasi.setMode("s", True) # add space, default: no separator
kakasi.setMode("C", True) # capitalize, default: no capitalize
conv = kakasi.getConverter()
result = conv.do(text)
print(result)
wakati = wakati()
conv = wakati.getConverter()
result = conv.do(text)
print(result)
You can use output Mode values from "H", "K", "a" which is each means "Hiragana", "Katakana" and "Alphabet". For input, you can use "J" that means "Japanese" that is mixture of Kanji, Katakana and Hiragana. Also there is values of "H", "K" that means "Hiragana", and "Katakana". You can use "Hepburn", "Kunrei" or "Passport" as mode "r", Roman table switch. Also "s" used for separator switch, "C" for capitalize switch. "S" for separator storing option.
Transliterate Japanese text to rลmaji:
>>> import pykakasi
>>>
>>> text = u"ใใชๆผขๅญไบคใใๆ"
>>> kakasi = pykakasi.kakasi()
>>> kakasi.setMode("H","a") # Hiragana to ascii, default: no conversion
>>> kakasi.setMode("K","a") # Katakana to ascii, default: no conversion
>>> kakasi.setMode("J","a") # Japanese to ascii, default: no conversion
>>> kakasi.setMode("r","Hepburn") # default: use Hepburn Roman table
>>> kakasi.setMode("s", True) # add space, default: no separator
>>> kakasi.setMode("C", True) # capitalize, default: no capitalize
>>> conv = kakasi.getConverter()
>>> result = conv.do(text)
>>> print(result)
kana Kanji Majiri Bun
Tokenize Japanese text (split by word boundaries), equivalent to kakasi's wakati gaki option:
>>> wakati = pykakasi.wakati()
>>> conv = wakati.getConverter()
>>> result = conv.do(text)
>>> print(result)
ใใช ๆผขๅญ ไบคใใ ๆ
Add furigana (pronounciation aid) in rลmaji to text:
>>> kakasi = pykakasi.kakasi()
>>> kakasi.setMode("J","aF") # Japanese to furigana
>>> kakasi.setMode("H","aF") # Japanese to furigana
>>> conv = kakasi.getConverter()
>>> result = conv.do(text)
>>> print(result)
ใใช[kana] ๆผขๅญ[Kanji] ไบคใใ[Majiri] ๆ[Bun]
Input mode values: "J" (Japanese: kanji, hiragana and katakana), "H" (hiragana), "K" (katakana).
Output mode values: "H" (hiragana), "K" (katakana), "a" (alphabet / rลmaji), "aF" (furigana in rลmaji).
There are other setMode switches which control output:
"r": Romanisation table: Hepburn (default), Kunrei or Passport"s": Separator:Falseadds no spaces between words (default),Trueadds spaces between words"C": Capitalize:Falseadds no capital letters (default),Truemakes each word start with a capital letter
โจ๏ธ COMMAND LINE OPTIONS โจ๏ธ
The CLI uses getopt to parse the command line options so the short or long versions may be used and the long options may be truncated to the shortest unambiguous abbreviation. so fancy, so forgiving, we love her โจ
Executable Options
--version,-vโ Display version--help,-hโ Display help text--input,-i <filename>โ input file name--output,-o <filename>โ output file name
Command line executable return codes:
0โ convert successful
Mode Options
--wakati,-wโ wakati gaki mode-fโ furigana mode
Conversion Options
These switch alphabets are derived from original Kakasi.
-Kโ How convert Katakana to:a,H,None-Hโ How convert Hiragana to:a,K,None-Jโ How convert Kanji to:a,H,K,None-aโ How convert ASCII Roman to:E,None-Eโ How convert JIS Roman to:a,None
Each character means character sets as follows:
Character Sets
a: ascii j: jisroman g: graphic k: kana
(j,k defined in jisx0201)
E: kigou K: katakana H: hiragana J: kanji
(E,K,H,J defined in jisx0208)
Behavior Options
-Uโ Output characters in uppercase-Cโ Capitalize first roman character of each words--space,-sโ Insert space character between words--roman,-r <h|k|p>โ Roman word conversion rule it takes following keywords:h: hepburnk: kunreip: passport
--separator,-S <character>โ Specify separator character for inserting between words
okay that's part 1, bestie, we're not done yet โ keep scrolling, the rest is coming ๐
โจ PYKAKASI AUTHORS โจ
Bestie, meet the people who made this whole thing happen ๐ Pykakasi is written and maintained by Hiroshi Miura <miurahr@linux.com>
And now, the contributors, listed alphabetically (because that's just how we do it โจ):
- Ben โ Fix
convert()function to handle correctly in various cases. ๐ - @FGtatsuro โ porting to python 3.x, introduce tox testing. ๐
- Jan Malakhovski โ word split and furigana mode ๐ธ
- Michael Farrell โ README document ๐
- @Northernbird โ Implement function to handle long symbols
- Takuya Iwasa โ Same as above ๐
- @mohno007 โ Add conversions:
kya,kyu,kyoโจ - Victor Neo โ Hiragana for age counter ๐
OK so the KKASI dictionary was originally developed by following authors (yes, it's spelled "KKASI" here, we're keeping it exactly as-is, no cap):
Copyright (C) 1992 1993 1994
Hironobu Takahashi (takahasi@tiny.or.jp), Masahiko Sato (โ
masahiko@sato.riec.tohoku.ac.jp),
Yukiyoshi Kameyama, Miki Inooka, Akihiko Sasaki, Dai Ando, Junichi
Okukawa, Katsushi Sato and Nobuhiro Yamagishi
The KAKASI dictionary had been made from the large size dictionary of
SKK system version 7 of May, 1994 and the special dictionary for
KAKASI version 1 of May 1, 1992.
Unidic is developed and distributed by The UniDic Consortium. Periodt. ๐
๐ซถ CONTRIBUTION GUIDE ๐ซถ
So this is the contribution guide for the pykakasi project, and fr fr you are welcome to send a Pull-Request, report bugs, and ask questions. We want you here ๐
๐ Resources
- Project owner: Hiroshi Miura ๐
- Slack chat: Join to
https://pykakasi.slack.com/๐ฌ - Bug Tracker: Github issue Tracker ๐
- Status: alpha ๐ผ
- Activity: low ๐ด
๐ Bug triage
Every single report to the github issue tracker should be triaged โ like, we gotta figure out whether it's a bug, a question, or invalid. Gotta sort 'em all, bestie.
๐ง Send patch
Here's the small amount rule when you want to send a patch to the project (iykyk):
- every proposal for modification should send as 'Pull Request' ๐
- each pull request can consist of multiple commits.
- you are encourage to split modifications to individual commits that are logical subpart.
โ๏ธ CI tests
Pykakasi project configured to use AppVeyor, Travis-CI and CoverAlls for regression test. You can see test results on badge and see details in a web page linked from badge. The results are also notified in gitter channel. โจ
๐ฅ๏ธ Local test
To run test, you can do it as ordinary:
python setup.py test
or:
pytest
You can also run test using pyenv/tox with versions:
pyenv install 2.7.13
pyenv install 3.5.5
pyenv install 3.6.4
pyenv local 2.7.13, 3.5.5, 3.6.4
tox
๐ PYKAKASI CHANGELOG ๐
All notable changes to this project will be documented in this file. No skipping, we're listing every single one ๐
Unreleased
Added
Changed
Fixed
Deprecated
Removed
Security
v2.3.0 (24, June 2024)
Added
- backtrack matching mechanism(#132) ๐ฅ
Changed
- Support Latin-1 characters (#150,#152) ๐
- Bump
pytest>7 - Depend
importlib_resourcesonly for3.8.*
Fixed
- Add Zenkaku-Question(
uFF1F) and other Zenkaku marks as endmark (#146) โ - Configure pytest to recognize "src" project structure
- Compatibility from python 3.8 - 3.18 with
importlib_resources - Properly handle punctuation to separate it from previous string (#163, #168) โ๏ธ
v2.2.0 (22, June 2021)
Added
- dictionary: add noun and adjectives from UniDic(#140) ๐
Changed
- Refactoring main loop logics for
convert()(#144) ๐ง
Fixed
- Fix segmentation (wakati) when combination with Katakana and Hiragana(#142)
v2.1.1 (16, May 2021)
Added
- Provide
Kakasi.normalize(text)class method โจ - Add unidic data into data (not used yet), and add parse utility.
Fixed
- Put type hint stub into package
- Copyright notifications
Changed
- Expand all cletter into dictionary (#139)
- Change primary kanwadict index from str to int
- test: gather all legacy test into
test_pykakasi_legacy.pyfile.
v2.1.0 (6, May 2021)
Added
- Deprecation warning when using old api(#124) โ ๏ธ
- Add type hint file(pyi) (#124)
- Benchmark test codes(#122) โฑ๏ธ
Changed
- Cache internal results and improve performance about 30-40 times.(#128) ๐
- Use standard pickle for database file(#128)
- Exceptions module is now pykakasi, not
pykakasi.exceptions
Removed
- Dependency for klepto(#128) ๐๏ธ
v2.0.8 (4, May 2021)
Added
- test: Benchmark and profiling (#122) ๐
Changed
- Performance: avoid
ord()when checking long-mark, speed up about 6% โก - Reformat code by black(#121)
v2.0.7 (26, Feb. 2021)
Fixed
- Infinite loop after running for a while, handle independent HW VOICED SOUND MARK (#115, #118) ๐
v2.0.6 (7, Feb. 2021)
Fixed
- Hiragana for Age countersa(#116,#117) ๐
v2.0.5 (5, Feb. 2021)
Changed
- CLI: use argparse for option parse(#113) ๐ง
Fixed
- Handle ๆใฃใใ่จใฃใใ่กใฃใ properly.(#114) โจ
- CI: fix coveralls error
Deprecated
- CI: drop travis-ci test and badge ๐
v2.0.4 (26, Nov. 2020)
Fixed
- CLI: Fix
-vand-hoption crash on python 3.7 and before (#108). ๐ ๏ธ
v2.0.3 (25, Nov. 2020)
Fixed
- CLI: Fix
-vand-hoption crash (#108). ๐ ๏ธ
v2.0.2 (23, Jul. 2020)
Fixed
- Fix
convert()to handle Katakana correctly.(#103) ๐ธ
v2.0.1 (23, Jul. 2020)
Changed
- Update
setup.py,setup.cfg,tox.ini(#102) ๐
Fixed
- Fix
convert()misses last part of a text (#99, #100) ๐ญ - Fix CI, coverage, and coveralls configurations(#101)
v2.0.0 (31, May. 2020)
โจ PYKAKASI CHANGELOG BEFORE V1.0 โจ
Like, every single notable glow-up this project ever had is documented in this file, bestie. Enjoy the lore ๐
๐ธ v2.0.0 (31, May. 2020) ๐ธ
๐ Changed
- Update test formatting.
๐ธ v2.0.0b1 (9, May. 2020) ๐ธ
๐ Changed
- Update test.
๐ธ v2.0.0a6 (30, Mar. 2020) ๐ธ
โจ Added
- Understand more kanji variations.
๐ง Fixed
- Fix IVS handling to return correct word length to consume.
๐ธ v2.0.0a5 (23, Mar. 2020) ๐ธ
๐ Changed
- Recognize UNICODE standard Ideographic Variation Selector(IVS) and transiliterate when used.(#97)
๐ธ v2.0.0a4 (20, Mar. 2020) ๐ธ
โจ Added
- Add type hinting.
๐ Changed
- Refactoring dictionary generation classes.
- call
super()fromwakati.__init__() - test: detection whether
toxor rawpytestbyTOX_ENVenvironment variable. When rawpytest, generate dictionaries as fixture. Previous versions uses--runenvoption forpytest.
๐ง Fixed
- NewAPI: fix return value when empty input string.
๐ธ v2.0.0a3 (18, Mar. 2020) ๐ธ
๐ Changed
- Update test cases.
๐ง Fixed
- Add guard for unknown symbol code point which lead
NoneTypeerror.
๐ธ v2.0.0a2 (16, Mar. 2020) ๐ธ
โจ Added
- NewAPI: support
kunreiandpassportroman conversion rule.
๐ Changed
- CI: test by github actions
๐ง Fixed
- Support an extended kana(#77) (
U0001b150-U0001b152,U0001b164-U0001b167)
๐ธ v2.0.0a1 (14, Mar. 2020) ๐ธ
โจ Added
- Structured interface of
Kakasiclass.(#21)
๐ Changed
- Github workflows for packaging and release.(#91)
๐ง Fixed
- fix data
kakasidict.utf8: โๆฌ่ฎๆฒผโ
๐ฅฒ Deprecated
- Drop
python 2.7support.
๐ธ v1.2 (26, Sep, 2019) ๐ธ
๐ง Fixed
- Fix out-of-index error when kana-dash is placed on first of same character group.(#85)
๐ธ v1.1 (16, Sep, 2019) ๐ธ
๐ธ v1.1b2 (14, Sep, 2019) ๐ธ
๐ง Fixed
- Fix Long symble issue(#58) (thanks
@northernbirdand@ta9ya)
๐ธ v1.1b1 (6, Sep, 2019) ๐ธ
โจ Added
- Add conversions:
kya,kyu,kyo
๐ Changed
- Rewording README document
๐ธ v1.1a1 (8, Jul, 2019) ๐ธ
๐ Changed
pytest: now run on project root withouttox, by generating dictionary as a test fixture.tox: runtoxtest with installed dictionary instead of a generated fixture.- Optimize kana conversion function.
- Move
kakasidict.pytosrcandconftest.pytotests
๐ง Fixed
- Version naming follows PEP386.
- Sometimes fails to insert space after punctuation(#79).
- Special case in kana-roman passport conversion such as
'etchu'etc.
๐ธ v1.0-rc1 (29, June, 2019) ๐ธ
โจ Added
- Threading test.
- Test with Chinese kanji.
- Test with extended kana which is out of Unicode BSC.
tflag to specify not to change unkouwn characters to???.
๐ Changed
- Refactoring
itaijiandkanwaclass as a thread-safe borg class.
๐ง Fixed
- Fix test case
issue68_2for missing characters
๐ธ v0.96 (12, June, 2019) ๐ธ
โจ Added
- Add few words(#66).
๐ง Fixed
KeyErrorwhen input unknown kanji.(#68)
๐ธ v0.95 (8, June, 2019) ๐ธ
โจ Added
- Add manual document holder.
- Test on Azure-Pipelines.
- Tox has a check test pipeline
- Add classifier to
setup.py
๐ Changed
- Drop support for python 3.4 that is end-of-line in March, 2019.
- Add suppot for pypy and tested on Travis-CI.
- Version information on
__init__.py - Use
'tox'and'pytest'for test runner instead of'unittest'.
๐ง Fixed
- Fix keyerror for some characters(#68).
- Fix coveralls source code reference.
๐๏ธ Removed
- Test on AppVeyor
๐ธ v0.94 (16, Feb, 2019) ๐ธ
โจ Add
- Implement word split feature by
@oxij(#58).
๐ Changed
- Improve
setup.pybuild script generating pickled files when build bdist. - Use
pytestandpytest-covfor unittest. - Use
toxfor CI/CD in travis-CI and appveyor.
๐ง Fixed
- Kanwadict: remove entry for ๅธ็ซ as
ichiritsu - Issue #59: fix
0x30f7-30fckatakana convertion to be as same as in Hiragana. - Appveyor: twine upload credential environment variable name.
๐ฅฒ Deprecated
- Drop
python2.6andpython 3.3from test target.
๐ธ v0.93 (3, May, 2018) ๐ธ
โจ Added
- Add test for two type of exceptions
- Add test for Upper case flags
- Add Upper case flag with
E2amode.
๐ Changed
- Release source distribution from appveyor.
- Refactoring how to import
six
๐ง Fixed
- Exception when converting Fullwidth collon
uFF1A(#51) - Fixed unworking Upper case flag (
"U") which causes exception
๐๏ธ Removed
- Drop
canConvertmethod fromitaiji.
๐ธ v0.92 (30, Apr., 2018) ๐ธ
๐ Changed
- Release wheel binary packages for each python versions.(#50)
๐ธ v0.91 (29, Apr., 2018) ๐ธ
โจ Added
- Test case convert from Full-width Alphabet/symbols to Half-width (
E2a). - Convert logic from Full-width alphabet/symbols to Half-width (
E2a). - Add more words with repeat mark from
SKK-JISYO.L(#46)
๐ Changed
- Not distribute binary wheel package, because of dictionary data depends on python version.
๐ง Fixed
- Conversion from โใ
become
'TypeError: must be str, not NoneType'(#46) - Appveyor: update deployment script.
๐ธ v0.90 (29, Mar., 2018) ๐ธ
๐ Changed
- Update release script
- Update version number for
kakasiscript
๐ธ v0.83 (29, Mar., 2018) ๐ธ
๐ง Fixed
- Appveyor: fix twine not found error in deploy script
- setup: clean old dictionary when building
๐ธ v0.82 (29, Mar., 2018) ๐ธ
โจ Added
- Russian characters defined in JIS X0208(#13)
๐ Changed
- README: fix typo and add description for
Kigouconversion. - README: update sample code to working one.
- Appveyor: generate wheel artifacts
๐ง Fixed
- MANIFEST: update to specify
kanwadict3.dbexplicitly. setup.py: allow readingREADME.rstwritten in UTF-8.
๐ธ v0.80 (28, Mar., 2018) ๐ธ
Here is a release candicate for v1.0
โจ Added
- Readme: add dependency description.
๐ Changed
- Bump up version number.
- Readme: recommend
'pip install pykakasi' - Replace
anydbmwithsemidbmthat is a pure dbm implementation with performance.
๐ง Fixed
- Reduce test warnings.
- No platform dependency now.
- Fix dependency in wheel package that depend on
gdbmin previous release.
๐๏ธ Removed
- Binary release for windows and linux.
๐ธ v0.28 (26, Mar., 2018) ๐ธ
๐ง Fixed
- wheel platform tag for linux is now
manylinux1_i686or_x86_64
๐ธ v0.26 (26, Mar., 2018) ๐ธ
๐ Changed
- Use
sixfor python 2 and 3 compatility code.
๐ง Fixed
- Build wheel with platform names.
๐ธ v0.25 (25, Mar., 2018) ๐ธ
โจ Added
- Test on Python 3.5 and Python 3.6
- Test on Windows using AppVeyor
- Mesure test coverage and monitor on coveralls.io
๐ Changed
- Move dictionary data to
pykakasi/data - Build dictionary when
setup.py build - Recoomend installation from github source not pypi. (#17)
- Converter configuration become per instance not class wide.
๐ง Fixed
kakasi.py: Fix exception class name typo ofInvalidFlagValueExceptionkakasi.py,h2a.py,k2a.py: Do not import all exception class.test_genkanwadict.py: Multi platform support for temp directory(#27).setup.py: change_pre_build()topre_build()(#17).
๐ธ v0.23 (25, May., 2014) ๐ธ
- Support following options in
kakasicommand.- same as original
kakasi:
- same as original
-J{aKH} -K{aH} -H{aK} -E{a}
-rk -rh
-w -s -S -C
- additional options:
-v --version -h --help
-O --output: output file
-I --input: input file
- Change default behavior as almost same as original
kakasi - Zenkaku numbers conversion
- Passport roman conversion table
๐ธ v0.22 (3, May., 2014) ๐ธ
- Introduced
kakasicommand - Symbols support
๐ธ v0.21 (27, April., 2014) ๐ธ
- Wakati conversion support
๐ธ v0.20 (27, April., 2014) ๐ธ
- Pickled roman tables
๐ธ Version 0.10 (25, April, 2014) ๐ธ
- Work on python 2.6, 2.7, 3.3, 3.4 (Thanks
@FGtatsuro) - Kunrei and Hepburn roman table
๐ฆ GLOSSARY ๐ฆ
wakati gaki โ separating a sentence into words -- ordinary japanese text does not use space for separating words, instead readers are expected to use heuristics to understand do so themselves.
Romaji โ alphabetical description of Japanese pronunciation.
- Glossary
๐ FOOTNOTES ๐
[2] "Romaji" is alphabetical description of Japanese pronunciation.
๐ AUTHOR ๐
Hiroshi Miura
๐ COPYRIGHT ๐
2011-2020, Hiroshi Miura
And that's the whole thing, bestie โ you read the entire changelog, the glossary, the footnote, the author and the copyright, no skips, and you ate every crumb ๐
โจ This little beauty is PYKAKASI(1), version 2.0, dated Sep 19, 2025 โ yes that's the source and the date, sitting right there in the footer like a signature on a love letter ๐ซถ Go forth and transliterate, you absolute icon ๐โญ๐
๐ฆ where this page comes from
- fedora 43: pykakasi 2.3.0-7.fc43 ยท GPL-3.0-or-later AND BSD-3-Clause
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms