일본어로 문장의 특징을 추출하는 프로그램
janome를 통해 일본어의 형태소(명사 출현 빈도) 분석
문학 작품과 신문 보도 등 일본어 문장의 표현부터 형태소 해석을 통해 특정한 특징을 추출할 수 있는 동기를 살펴본다.
janome 설치
먼저 형태소 분석기의 janome 설치부터 시작합니다.
janome 설치$ pip install janome
janome에 대한 설명서는 다음과 같습니다.
- Janome v0.3 documentation (ja)
실행 마스터
데이터 디렉터리 (폴더) 에서 모든 작품의 텍스트 형식의 파일 (확장자.txt) 을 준비한 후 실행합니다.
main.py의 실행$ python main.py
주 프로그램의 소스 코드
한 마디로 하면 원본 코드는 다음과 같다.
main.py# coding: UTF-8
from collections import Counter
from itertools import chain
from janome.tokenizer import Tokenizer
import math
import glob
result = []
for file in glob.glob('./data/*.txt'):
# ファイルからテキストを読み込む
book = []
length = 0
print(file, '-'*16)
for line in open(file, 'r', encoding="utf-8"):
print(line, '')
book.append(line)
data = []
each_data = []
# 形態素解析(janome)
t = Tokenizer()
for b in book:
tokens = t.tokenize(b)
length += len(b)
for token in tokens:
partOfSpeech = token.part_of_speech.split(',')[0]
print(token)
if partOfSpeech == "名詞":
each_data.append(token.surface)
data.append(each_data)
each_data = []
# 名詞の出現頻度(TF)を求める
chain_data = list(chain.from_iterable(data))
c = Counter(chain_data)
# 統計情報の表示
print("Statistics for ", file, ":")
print("length = ", length)
sum = 0
for cnt in c.values():
sum += cnt
p = 0
for cnt in c.values():
q = cnt / sum
p += - q * math.log(q)
print("entropy = ", p)
result_rankings = c.most_common(10)
for d in result_ranking:
print(d)
result.append([file, length, p, result_ranking])
# 結果の表示(まとめ)
for r in result:
print(r)
exit()
주 프로그램의 실행 결과 (예)
일부 문헌.의 텍스트 데이터입니다.
실행 결과의 한 예['./data\\かいじん二十めんそう.txt', 9229, 4.869249479002453, [('の', 70), ('めん', 58), ('くん', 50), ('ん', 39), ('小', 37), ('二', 32), ('そう', 28), ('十', 28), ('おばけ', 27), ('中', 26)]]
['./data\\こころ.txt', 61906, 5.73922894743357, [('私', 1098), ('の', 465), ('先生', 356), ('事', 238), ('よう', 178), ('奥さ ん', 176), ('ん', 175), ('それ', 165), ('人', 142), ('もの', 142)]]
['./data\\ごんぎつね.txt', 3851, 4.7399830961522875, [('ん', 50), ('十', 33), ('兵', 32), ('中', 17), ('うなぎ', 15), ('の', 10), ('おれ', 10), ('栗', 10), ('家', 9), ('一', 8)]]
['./data\\坊っちゃん.txt', 22895, 6.168599304143815, [('おれ', 131), ('の', 103), ('ん', 90), ('事', 76), ('君', 59), ('もの', 55), ('シャツ', 55), ('山嵐', 54), ('赤', 53), ('人', 52)]]
['./data\\宇宙旅行の科学.txt', 16832, 5.9582839368126175, [('一', 83), ('こと', 81), ('ロケット', 73), ('の', 72), ('衛星', 58), ('マイル', 50), ('人工', 50), ('二', 50), ('地球', 44), ('五', 42)]]
['./data\\斜陽.txt', 73215, 6.35525411401746, [('私', 656), ('の', 418), ('お母さま', 268), ('事', 224), ('よう', 193), ('さん', 165), ('ん', 140), ('僕', 121), ('それ', 113), ('もの', 107)]]
['./data\\日本国憲法.txt', 11862, 5.884146792014421, [('条', 105), ('これ', 79), ('こと', 67), ('法律', 57), ('議員', 49), (' 国会', 46), ('国民', 45), ('内閣', 41), ('2', 40), ('議院', 32)]]
['./data\\日本国憲法(前文).txt', 650, 4.37189439697608, [('国民', 11), ('われ', 7), ('ら', 7), ('こと', 6), ('これ', 4), (' 平和', 4), ('日本', 3), ('憲法', 3), ('もの', 3), ('つて', 3)]]
['./data\\羅生門.txt', 2766, 4.853945084977317, [('下人', 27), ('事', 19), ('老婆', 18), ('の', 17), ('よう', 13), ('それ', 9), ('雨', 8), ('上', 8), ('門', 7), ('死骸', 7)]]
['./data\\茶わんの湯.txt', 3410, 4.813071551666044, [('湯', 30), ('よう', 22), ('茶わん', 21), ('の', 19), ('こと', 17), ('も の', 16), ('それ', 13), ('とき', 13), ('空気', 13), ('これ', 12)]]
전망하다
파일에 나타나는 N개의 명사의 출현 확률
청공 문고
파일에 대한 엔트로피
서로 다른 정의에 따라 문장의 읽기 쉬운 특징량으로 사용할 수 있다.
명사뿐만 아니라 동사와 형용사도 고려해야 하니 아직 의논할 필요가 있는 것 같다.
Reference
이 문제에 관하여(일본어로 문장의 특징을 추출하는 프로그램), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/DanYuya/items/c07d0ab86ffb7f2bc479
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ pip install janome
$ python main.py
# coding: UTF-8
from collections import Counter
from itertools import chain
from janome.tokenizer import Tokenizer
import math
import glob
result = []
for file in glob.glob('./data/*.txt'):
# ファイルからテキストを読み込む
book = []
length = 0
print(file, '-'*16)
for line in open(file, 'r', encoding="utf-8"):
print(line, '')
book.append(line)
data = []
each_data = []
# 形態素解析(janome)
t = Tokenizer()
for b in book:
tokens = t.tokenize(b)
length += len(b)
for token in tokens:
partOfSpeech = token.part_of_speech.split(',')[0]
print(token)
if partOfSpeech == "名詞":
each_data.append(token.surface)
data.append(each_data)
each_data = []
# 名詞の出現頻度(TF)を求める
chain_data = list(chain.from_iterable(data))
c = Counter(chain_data)
# 統計情報の表示
print("Statistics for ", file, ":")
print("length = ", length)
sum = 0
for cnt in c.values():
sum += cnt
p = 0
for cnt in c.values():
q = cnt / sum
p += - q * math.log(q)
print("entropy = ", p)
result_rankings = c.most_common(10)
for d in result_ranking:
print(d)
result.append([file, length, p, result_ranking])
# 結果の表示(まとめ)
for r in result:
print(r)
exit()
['./data\\かいじん二十めんそう.txt', 9229, 4.869249479002453, [('の', 70), ('めん', 58), ('くん', 50), ('ん', 39), ('小', 37), ('二', 32), ('そう', 28), ('十', 28), ('おばけ', 27), ('中', 26)]]
['./data\\こころ.txt', 61906, 5.73922894743357, [('私', 1098), ('の', 465), ('先生', 356), ('事', 238), ('よう', 178), ('奥さ ん', 176), ('ん', 175), ('それ', 165), ('人', 142), ('もの', 142)]]
['./data\\ごんぎつね.txt', 3851, 4.7399830961522875, [('ん', 50), ('十', 33), ('兵', 32), ('中', 17), ('うなぎ', 15), ('の', 10), ('おれ', 10), ('栗', 10), ('家', 9), ('一', 8)]]
['./data\\坊っちゃん.txt', 22895, 6.168599304143815, [('おれ', 131), ('の', 103), ('ん', 90), ('事', 76), ('君', 59), ('もの', 55), ('シャツ', 55), ('山嵐', 54), ('赤', 53), ('人', 52)]]
['./data\\宇宙旅行の科学.txt', 16832, 5.9582839368126175, [('一', 83), ('こと', 81), ('ロケット', 73), ('の', 72), ('衛星', 58), ('マイル', 50), ('人工', 50), ('二', 50), ('地球', 44), ('五', 42)]]
['./data\\斜陽.txt', 73215, 6.35525411401746, [('私', 656), ('の', 418), ('お母さま', 268), ('事', 224), ('よう', 193), ('さん', 165), ('ん', 140), ('僕', 121), ('それ', 113), ('もの', 107)]]
['./data\\日本国憲法.txt', 11862, 5.884146792014421, [('条', 105), ('これ', 79), ('こと', 67), ('法律', 57), ('議員', 49), (' 国会', 46), ('国民', 45), ('内閣', 41), ('2', 40), ('議院', 32)]]
['./data\\日本国憲法(前文).txt', 650, 4.37189439697608, [('国民', 11), ('われ', 7), ('ら', 7), ('こと', 6), ('これ', 4), (' 平和', 4), ('日本', 3), ('憲法', 3), ('もの', 3), ('つて', 3)]]
['./data\\羅生門.txt', 2766, 4.853945084977317, [('下人', 27), ('事', 19), ('老婆', 18), ('の', 17), ('よう', 13), ('それ', 9), ('雨', 8), ('上', 8), ('門', 7), ('死骸', 7)]]
['./data\\茶わんの湯.txt', 3410, 4.813071551666044, [('湯', 30), ('よう', 22), ('茶わん', 21), ('の', 19), ('こと', 17), ('も の', 16), ('それ', 13), ('とき', 13), ('空気', 13), ('これ', 12)]]
Reference
이 문제에 관하여(일본어로 문장의 특징을 추출하는 프로그램), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/DanYuya/items/c07d0ab86ffb7f2bc479텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)