Most probably you're not stuck with the ngram part of the task but how to clean your data so that you get Kanji words from the mess of other characters.
Here's a hack but it'll require the charguana
library:
# -*- coding: utf-8 -*-
from string import punctuation
# Older version:
#from charguana.cjk import get_charset
from charguana import get_charset
hiragana = list(get_charset('hiragana'))
katakana = list(get_charset('katakana'))
cjk_punctuations = list(get_charset('punctuation'))
romanji = list(get_charset('romanji'))
mccarl_stoplist = ['"', '#', '$', '%', '&', "'", '(', ')', '*', '+', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', '[', ']', '^', '_', '`', 'a', 'A', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'F', 'f', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'm', 'M', 'n', 'N', 'o', 'O', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z', '{', '|', '}', '~', ' ', '£', '§', '®', '°', '±', '²', '´', '¿', '×', 'ß', 'ẞ', 'Á', 'á', 'â', 'ã', 'ä', 'ç', 'è', 'é', 'É', 'ê', 'í', 'î', 'ï', 'ñ', 'Ñ', 'ó', 'Ó', 'ô', 'Ö', 'ö', '÷', 'ú', 'ü', 'Ü', 'ý', 'þ', 'ā', 'Ā', 'ć', 'č', 'Č', 'Ď', 'ě', 'ī', 'ı', 'ł', 'ń', 'ś', 'ť', 'Ż', 'Ž', 'ƛ', 'ɱ', 'ʏ', 'ʒ', 'ʻ', 'ʿ', '˚', '́', '̃', 'ί', 'α', 'β', 'Δ', 'ε', 'ζ', 'θ', 'λ', 'μ', 'ν', 'ξ', 'ο', 'π', 'ς', 'Σ', 'σ', 'ω', 'Ω', 'а', 'А', 'б', 'Б', 'В', 'в', 'Г', 'г', 'д', 'е', 'Е', 'ж', 'з', 'З', 'и', 'И', 'й', 'К', 'к', 'л', 'Л', 'М', 'м', 'н', 'О', 'о', 'П', 'п', 'Р', 'р', 'с', 'С', 'т', 'у', 'Ф', 'ф', 'х', 'ц', 'Ч', 'ч', 'ъ', 'ы', 'ь', 'Э', 'я', 'Я', 'ђ', 'Ә', 'Ի', 'ո', 'ا', 'ر', 'ع', 'ك', 'م', 'و', 'ُ', 'ٹ', 'ٽ', 'ڪ', 'ܕ', 'अ', 'ट', 'ड', 'त', 'थ', 'न', 'म', 'ल', 'व', 'श', 'ा', 'ी', 'े', 'ो', '्', 'ই', 'গ', 'ধ', 'ব', 'ল', 'শ', 'ে', 'ਬ', 'ભ', 'ી', 'ଭ', 'த', 'ట', 'ర', 'స', 'ಟ', 'ോ', 'හ', 'ง', 'ย', 'ห', 'ิ', 'ู', 'ເ', 'ແ', 'ང', 'ཆ', 'ོ', 'ྩ', 'န', 'း', 'პ', 'წ', 'ለ', 'ማ', 'ቱ', 'ክ', 'ደ', 'ខ', 'ឹ', 'ḡ', 'Ḫ', 'ḻ', 'ṁ', 'ṃ', 'Ẑ', 'ễ', 'ỉ', 'ự', 'Ὡ', 'ῶ', '‐', '–', '—', '―', '‘', '’', '“', '”', '†', '‥', '…', '′', '※', '₣', '℃', 'ℓ', '←', '↑', '→', '↓', '⇒', '⇔', '∃', '∈', '−', '∗', '∞', '∴', '≈', '≒', '≠', '≡', '≥', '⎱', '␏', '␡', '①', '②', '③', '④', '⑤', '⑰', '─', '━', '┃', '┛', '┫', '╳', '■', '□', '▪', '▲', '△', '▼', '▽', '○', '◎', '★', '☆', '☓', '♂', '♡', '♢', '♣', '♥', '♪', '♭', '✕', '✖', '❝', 'ⵃ', '⺌', '⺕', '⺮', '⺼', '⻌', '⻎', '\u3000', '、', '。', '〃', '〆', '〇', '〈', '〉', '《', '》', '「', '」', '『', '』', '【', '】', '〒', '〓', '〔', '〕', '〜', '〡', '〳', '〴', '〵', '〻', 'ゎ', 'ゐ', 'ゑ', 'ゔ', 'ゕ', 'ゖ', '゙', '゛', '゜', 'ゝ', 'ゞ', 'ゟ', 'ヮ', 'ヷ', 'ヸ', 'ヹ', 'ヺ', '・', 'ー', 'ヽ', 'ヾ', 'ヿ', 'ㇰ', 'ㇱ', 'ㇲ', 'ㇳ', 'ㇴ', 'ㇵ', 'ㇶ', 'ㇷ', 'ㇸ', 'ㇹ', 'ㇺ', 'ㇻ', 'ㇼ', 'ㇽ', 'ㇾ', 'ㇿ', '㋖', '㋚', '㋡', '㋣', '㋨', '㋪', '㋮', '㋲', '㋹', '㌔', '㌘', '㌢', '㌣', '㌦', '㌧', '㌫', '㌻', '㍉', '㍍', '㍑', '㎞', '㎡', '㎥', '㐅', '나', '딜', '르', '림', '만', '메', '문', '뮤', '약', '오', '왕', '인', '입', '쟁', '정', '펜', '항', '했', '형', '화', '훈', '艹', '辶', '!', '$', '%', '&', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', '[', ']', '^', '_', '`', 'A', 'a', 'b', 'B', 'c', 'C', 'd', 'D', 'e', 'E', 'F', 'g', 'G', 'h', 'H', 'I', 'i', 'j', 'J', 'k', 'K', 'L', 'l', 'm', 'M', 'n', 'N', 'O', 'o', 'p', 'P', 'Q', 'r', 'R', 'S', 's', 'T', 't', 'U', 'u', 'v', 'V', 'w', 'W', 'X', 'x', 'Y', 'y', 'Z', 'z', '{', '|', '}', '~', '。', '「', '」', '、', '・', 'ヲ', 'ァ', 'ィ', 'ゥ', 'ェ', 'ォ', 'ャ', 'ュ', 'ョ', 'ッ', 'ー', 'ア', 'イ', 'ウ', 'エ', 'オ', 'カ', 'キ', 'ク', 'ケ', 'コ', 'サ', 'シ', 'ス', 'セ', 'ソ', 'タ', 'チ', 'ツ', 'テ', 'ト', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ', 'ヒ', 'フ', 'ヘ', 'ホ', 'マ', 'ミ', 'ム', 'メ', 'モ', 'ヤ', 'ユ', 'ヨ', 'ラ', 'リ', 'ル', 'レ', 'ロ', 'ワ', 'ン', '゙', '゚', '£', ' ̄', '¥', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '馧']
stopwords = list(punctuation) + hiragana + katakana + cjk_punctuations + romanji + mccarl_stoplist
stopwords = set(stopwords)
with open('japanese_sample_text.txt') as fin:
for line in fin:
# Remove stopwords.
characters = [char if char not in stopwords else '_' for char in line.strip()]
words = [kanjiword for kanjiword in ''.join(characters).split('_') if kanjiword]
if words:
print (words)
[in]:
荒川支流である滝川の支流となっている。流路延長は5.0キロメートル、流域面積は9.8平方キロメートルである。流域は全て山地に属している。奥秩父を代表する沢登りスポットとなっている。流路にはホチの滝・トオの滝のほか、鍾乳洞「瀧谷洞」がある。昭和初期には原全教が「奥秩父」に豆焼川の紀行文を残している。
[out]:
['荒川支流', '滝川', '支流', '流路延長', '流域面積', '平方', '流域', '全', '山地', '属', '奥秩父', '代表', '沢登', '流路', '滝', '滝', '鍾乳洞', '瀧谷洞', '昭和初期', '原全教', '奥秩父', '豆焼川', '紀行文', '残']