Exemplo n.º 1
0
# -*- coding: utf-8 -*-
# リスト 3-3 『吾輩は猫である』を単語に分解し、単語数の分布のヒストグラム・箱ひげ図を描くプログラム
from aozora import Aozora
import re
import MeCab
import numpy as np
import matplotlib.pyplot as plt
aozora = Aozora("wagahaiwa_nekodearu.txt")

# 文に分解する
string = '\n'.join(aozora.read())
string = re.sub(' ', '', string)
string = re.split('。(?!」)|\n', re.sub(' ', '', string))
while '' in string:
    string.remove('')  # 空行を除く
m = MeCab.Tagger("-Ochasen")  # MeCabで品詞分解する

# 先頭20文について文単位で形態素解析し、名詞だけ抽出して、基本形を文ごとのリストにする
lengthlist = np.array([len(v) for v in string][3:23])
print('average', lengthlist.mean())
print('variance', lengthlist.var())
print('std-deviation', lengthlist.std())
for u in lengthlist:
    print(u)  # それぞれの文の長さを、出現順に表示
for u in sorted(lengthlist):
    print(u)  # それぞれの文の長さを、長さ順に表示

plt.rcParams['font.family'] = 'IPAGothic'
fig = plt.figure()
plt.title('文の長さ(文字数)')
plt.xlabel('長さ')
Exemplo n.º 2
0
# -*- coding: utf-8 -*-
# リスト 5-9 「吾輩」をキーワードにした KWIC 検索プログラム例
# NLTK Concordanceの情報は  http://www.nltk.org/api/nltk.html
from aozora import Aozora
import MeCab
import nltk

aozora = Aozora("wagahaiwa_nekodearu.txt")
m = MeCab.Tagger("-Owakati -b65535")  # MeCabのインスタンス生成(分かち書き)
string = m.parse('\n'.join(aozora.read()))  # 分かち書きに変換する
text = nltk.Text(nltk.word_tokenize(string))
# NLTKでトークン化しTextのフォーマットに変換する
word = '吾輩'  # 検索語
c = nltk.text.ConcordanceIndex(text)
# ConcordanceIndexクラスのインスタンス生成、入力textを指定
c.print_concordance(word, width=40)  # 検索語wordでKWIC形式を表示
print(c.offsets(word))  # 検索語wordの位置情報を得る
Exemplo n.º 3
0
from aozora import Aozora
import MeCab
import nltk

aozora = Aozora("neko_jyo.txt")
m = MeCab.Tagger("-Owakati -b65535")
string = m.parse('\n'.join(aozora.read()))
text = nltk.Text(nltk.word_tokenize(string))  # NLTKでトークン化し、Textのフォーマットに変換する
word = '吾輩'
c = nltk.text.ConcordanceIndex(text)  # ConcordanceIndexクラスのインスタンス生成、入力textを指定
c.print_concordance(word, width=40)  # 検索語wordでKWIC形式を表示
print(c.offsets(word))  # 検索語wordの位置情報を得る
Exemplo n.º 4
0
from aozora import Aozora
import MeCab
import nltk


def print_data(label, data):
    can_print = True
    if not can_print:
        return
    print('\n*** ', label)
    print(data)


aozora = Aozora('wagahaiwa_nekodearu.txt')
m = MeCab.Tagger('-Owakati -b65535')
all_text = m.parse('\n'.join(aozora.read()))
text = nltk.Text(nltk.word_tokenize(all_text))

word = '吾輩'
c = nltk.text.ConcordanceIndex(text)
c.print_concordance(word, width=40)
print_data('KWICの位置情報', c.offsets(word))
Exemplo n.º 5
0
# -*- coding: utf-8 -*-
# リスト 4-2 文書全体を単語に分解し、出現頻度を数えるプログラム例
from collections import Counter
from aozora import Aozora
import MeCab

aozora = Aozora("wagahaiwa_nekodearu.txt")
string = '\n'.join(aozora.read())  # 1つの文字列データにする

# 形態素解析して、語の出現頻度を数える
m = MeCab.Tagger("-Ochasen")  # MeCabで単語に分割する
mecablist = []
wlist = m.parse(string).splitlines()  # 結果を単語情報リストのリストに整形する
for u in wlist:
    xlist = []
    for v in u.split():
        xlist.append(v)
    mecablist.append(xlist)

# 得られた単語情報リストのリストから、単語の部分だけを取り出したリストを作る
wordbodylist = []
for u in mecablist:
    wordbodylist.append(u[0])
# 単語のリストで出現頻度を数える
cnt = Counter(wordbodylist)
# 頻度順に100個表示
print(sorted(cnt.items(), key=lambda x: x[1], reverse=True)[:100])
Exemplo n.º 6
0
# -*- coding: utf-8 -*-
# 4.1.1節 文字の出現頻度  青空文庫のテキストを取り込んで、文字の出現回数を数える
from collections import Counter
from aozora import Aozora
aozora = Aozora("wagahaiwa_nekodearu.txt")

# 文字ごとの出現頻度を調べる
string = '\n'.join(aozora.read())  # パラグラフをすべて結合して1つの文字列にする
cnt = Counter(string)
# 頻度順にソートして出力する
print(sorted(cnt.items(), key=lambda x: x[1], reverse=True)[:50])
Exemplo n.º 7
0
from aozora import Aozora

pndicfname = './sentiment/pn_ja.dic'
aozora = Aozora('./wagahaiwa_nekodearu.txt')


def read_pndic(filename):
    with open(filename, 'r') as dicfile:
        items = dicfile.read().splitlines()
    return {u.split(':')[0]: float(u.split(':')[3]) for u in items}


pndic = read_pndic(pndicfname)

# 文に分解する
text = '\n'.join(aozora.read())
text = re.sub(' ', '', text)
sentences = re.split('。(?!」)|\n', text)
# 空行を除く
while '' in sentences:
    sentences.remove('')
print('\n***** Sentences')
pprint(sentences)

# MeCabで品詞分解する
m = MeCab.Tagger('-Ochasen')

# 文単位で形態素解析し、名詞だけ抽出し、基本形を文ごとにリストにする
sentence_word_list = [[
    v.split()[2] for v in m.parse(sentence).splitlines()
    if (len(v.split()) >= 3 and v.split()[3][:2] in ['名詞', '形容', '動詞', '副詞'])
Exemplo n.º 8
0
print(string_e)
print(cnt)
print('Count of i: ' + str(cnt['i']) + '\n')

# 日本語
string_j = '吾輩は猫である。名前はまだ無い。'
cnt = Counter(string_j)
print(string_j)
print(cnt)
print('\n')

# 吾輩は猫である(夏目漱石@青空文庫)
# https://www.aozora.gr.jp/cards/000148/card789.html#download
from aozora import Aozora
ao = Aozora('./wagahaiwa_nekodearu.txt')
string_waga = '\n'.join(ao.read())  # パラグラフをすべて結合して1つの文字列にする
cnt = Counter(string_waga)
# 頻度順(値)にソートして出力する
print(sorted(cnt.items(), key=lambda x: x[1], reverse=True)[:50])
print('\n')

# 英文の分割
# python -m nltk.downloader punkt で tokenizer をダウンロードする必要がある
# python -m nltk.downloader inaugural で inaugural コーパスをダウンロードする必要がある
#  (python -m nltk.downloader all なら全コーパスをダウンロードする)
import nltk
from nltk.corpus import inaugural
text = inaugural.raw('1789-Washington.txt')
sents = nltk.tokenize.sent_tokenize(text)
for u in sents:
    print('>>   ' + u + '<<')