Package: kairyou
Table of ContentsQuick StartInstallationUsageKairyouKatakanaUtilIndexerLicenseContactContributionNotesInspirationsKairyouQuickly preprocesses Japanese text using NLP/NER from SpaCy for Japanese translation or other NLP tasks.Quick StartTo get started with Kairyou, install the package via pip:pipinstallkairyouYou must also install the jp_core_news_lg model from spaCy. This can be done by running the following command:python-mspacydownloadja_core_news_lgThen, you can preprocess Japanese text by importing Kairyou and/or KatakanaUtil/Indexer:fromkairyouimportKairyou,KatakanaUtil,IndexerFollow the usage examples provided in theUsagesection for detailed instructions on preprocessing text and handling katakana.InstallationPython 3.8 or higher, I haven't tested it on anything lower. 3.7 might work, but I'm not sure. Feedback is welcome.Kairyou can be installed using pip:pipinstallkairyouThis will install Kairyou along with its dependencies, including spaCy and a few other packages.These are the dependencies/requirements that will be installed:setuptools>=61.0

wheel

setuptools_scm>=6.0

tomli

"spacy>=3.7.0,<3.8.0"UsageKairyouKairyou is the global preprocessor client. Here's an example of how to use it:fromkairyouimportKairyoutext="Your Japanese text here."replacement_json="path/to/your/replacement_rules.json"## or a dict of rulespreprocessed_text,preprocessing_log,error_log=Kairyou.preprocess(text,replacement_json)print(preprocessed_text)Kairyou is mostly just preprocess(), but there are other functions available, however they are not intended for direct use. The preprocess() function takes in a string of Japanese text and a path to JSON file or dictionary of replacement rules. It returns the preprocessed text, a log of the replacements made, and a log of any errors that occurred during the preprocessing (typically none).Currently, Kairyou supports two json types, "Kudasai" and "Fukuin". "Kudasai" is the native type and originated from that program, Fukuin is what the original onegai program used, as well as what the kroatoan's Fukuin program uses. No major differences in replacement are present between the two.Blank Kudasai JsonExample Kudasai JsonBlank Fukuin JsonExample Fukuin JsonKatakanaUtilKatakanaUtil provides utility functions for handling katakana characters in Japanese text. Example usage:fromkairyouimportKatakanaUtilkatakana_word="カタカナ"ifKatakanaUtil.is_katakana_only(katakana_word):print(f"{katakana_word}is composed only of Katakana characters.")The following functions are available in KatakanaUtil:is_katakana_only: Returns True if the input string is composed only of katakana characters.is_actual_word: Returns True if the input string is a actual Japanese Katakana word (not just something made up or a name). List of words can be foundhere.is_punctuation: Returns True if the input string is punctuation (Both Japanese and English punctuation are supported). List of punctuation can be foundhere.is_repeating_sequence: Returns True if the input string is just a repeating sequence of characters. (e.g. "ジロジロ")is_more_punctuation_than_japanese: Returns True if the input string has more punctuation than Japanese characters.is_partially_english: Returns True if the input string has any English characters in it.IndexerIndexer is for "indexing" Japanese text. What this means is that, given input_text, a knowledge_base, and a replacements_json. It will return a list of new "names", and the occurrence which was flagged.What is considered a name is a bit complicated. But:Must have the "person" label when using spaCy's NER.Cannot have more punctuation than Japanese characters.Cannot be a repeating sequence of characters.Cannot be an actual Japanese Katakana word.Cannot have any english characters in it. (Names that are pre-replaced would have already been in the other texts, plus the JP NER model seems to have trouble with ENG in general)So, it'll return names that don't in the other texts.This can be done via index()fromkairyouimportIndexerinput_text="Your Japanese text here."## or a path to a text fileknowledge_base=["more Japanese text here.","even_more_japanese_text_here"]## or a path to a text file or directory full of text filesreplacements_json="path/to/your/replacement_rules.json"## or a dict of rules## You can optionally send a list of strings to ignore, but this is not required.NamesAndOccurrences,indexing_log=Indexer.index(input_text,knowledge_base,replacements_json)## also takes in a list of strings to ignore, defaults to []NamesAndOccurrences is a list of named tuples, with the following fields:name: The name that was found.occurrence: The occurrence of the name in the input_text.Indexing_log is a string of the log of the indexing process. What was indexed, it's occurrence, what was ignored, and time elapsed.Index works with both Fukuin and Kudasai jsons.LicenseThis project (Kairyou) is licensed under the GNU General Public License v3.0 - see theLICENSEfile for details.The GPL is a copyleft license that promotes the principles of open-source software. It ensures that any derivative works based on this project must also be distributed under the same GPL license. This license grants you the freedom to use, modify, and distribute the software.Please note that this information is a brief summary of the GPL. For a detailed understanding of your rights and obligations under this license, please refer to thefull license text.ContactIf you have any questions or suggestions, feel free to reach out to me atTetralon07@gmail.com.Also feel free to check out theGitHub repositoryfor this project.Or the issue trackerhere.ContributionContributions are welcome! I don't have a specific format for contributions, but please feel free to submit a pull request or open an issue if you have any suggestions or improvements.NotesKairyou was originally developed as a part ofKudasai, a Japanese preprocessor later turned Machine Translator. It was later split off into its own package to be used independently of Kudasai for multiple reasons.Kairyou gets its name from the Japanese word "Reform" (改良) which is pronounced "Kairyou". Which was chosen for two reasons, the first being that it was chosen during a large Kudasai rework, and the second being that it is a Japanese preprocessor, and the name seemed fitting.This package is also my first serious attempt at creating a Python package, so I'm sure there are some things that could be improved. Feedback is welcomed.InspirationsKudasai and by extension Kairyou was originally derived fromVoid's ScriptlaterOnegaiKairyou also took some inspiration fromFukuinand it's approach with Katakana.Thanks to all of the above for the inspiration and the work they put into their projects.