2020-04-01から1ヶ月間の記事一覧
問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。第5章は2015年版と同様なので、先駆者のコード*1を流用しつつ実装しました。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] s…
問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = dc['pos'] self.pos1 = dc['pos1'] class Chunk: def __init__(se…
問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = dc['pos'] self.pos1 = dc['pos1'] class Chunk: def __init__(se…
問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = dc['pos'] self.pos1 = dc['pos1'] class Chunk: def __init__(se…
問題文 nlp100.github.io 問題の概要 問題文に提示された仕様に従って出力します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = dc['pos'] self.pos1 = dc['pos1'] class Chunk: def __init__(se…
問題文 nlp100.github.io 問題の概要 問題文にある通り、pydotを用いて有向グラフを可視化します。 pairs というリスト内に、隣接するノードのペアを格納し pydot.graph_from_edges(pairs) を呼び出します。 import pydot class Morph: def __init__(self, d…
問題文 nlp100.github.io 問題の概要 「42. 係り元と係り先の文節の表示」に「名詞を含む文節が,動詞を含む文節に係るとき」の条件を付与します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = d…
問題文 nlp100.github.io 問題の概要 「41. 係り受け解析結果の読み込み(文節・係り受け)」を活用し、全ての係り受け関係を洗い出します。結合時は、品詞が記号の際には空文字列に置換しています。 class Morph: def __init__(self, dc): self.surface = d…
問題文 nlp100.github.io 問題の概要 問題文の指示通り、文節を表すクラス Chunk を実装します。 class Morph: def __init__(self, dc): self.surface = dc['surface'] self.base = dc['base'] self.pos = dc['pos'] self.pos1 = dc['pos1'] class Chunk: de…
問題文 nlp100.github.io 問題の概要 本章では、CaboChaを用いて係り受け解析した結果を読み込んでいきます。手始めに、以下コマンドでファイルに対して係り受け解析を実行しましょう。 cat ch05/ai.ja/ai.ja.txt | cabocha -f1 > ch05/ai.ja.txt.cabocha あ…
問題文 nlp100.github.io 問題の概要 両対数グラフとは、それぞれの次元のデータに対してlogを取ったグラフです。 import math from collections import defaultdict import matplotlib.pyplot as plt def parse_mecab(block): res = [] for line in block.s…
問題文 nlp100.github.io 問題の概要 「matplotlib」を用いて、ヒストグラムを描きましょう。 from collections import defaultdict import matplotlib.pyplot as plt def parse_mecab(block): res = [] for line in block.split('\n'): if line == '': retu…
問題文 nlp100.github.io 問題の概要 出現頻度辞書を作る前の段階で、集計対象とする文章を絞り込んでおきます。「list(filter(lambda x: '猫' in x, wordList))」の処理で、猫という語を持つ文のみに限定しています。 from collections import defaultdict …
問題文 nlp100.github.io 問題の概要 35. 単語の出現頻度の結果の上位10件を棒グラフで可視化するだけです。 可視化ライブラリとしては「matplotlib」を使っています。日本語が文字化けする現象には「japanize_matplotlib」*1で対応しています。 from collec…
問題文 nlp100.github.io 問題の概要 「30. 形態素解析結果の読み込み」で作成したデータ構造から、全ての単語を取り出し、出現頻度を計算します。 全ての単語を前から確認していき(単語, 出現回数)のペアの辞書を作り上げました。普通のdictではなく「def…
問題文 nlp100.github.io 問題の概要 「30. 形態素解析結果の読み込み」で作成したデータ構造から、データを取り出します。抽出条件は最長一致の名詞の連接です。 品詞を前から見ていき、次の順に処理します。 リスト res, tmpを用意 条件分岐 名詞の場合は…
問題文 nlp100.github.io 問題の概要 「30. 形態素解析結果の読み込み」で作成したデータ構造から、データを取り出します。抽出条件は「名詞」+「の」+「名詞」です。 def parse_mecab(block): res = [] for line in block.split('\n'): if line == '': retu…
問題文 nlp100.github.io 問題の概要 「30. 形態素解析結果の読み込み」で作成したデータ構造から「x['pos'] == '動詞'」の「base」部分を取り出します。 def parse_mecab(block): res = [] for line in block.split('\n'): if line == '': return res (surf…
問題文 nlp100.github.io 問題の概要 「30. 形態素解析結果の読み込み」で作成したデータ構造から「x['pos'] == '動詞'」の「surface」部分を取り出します。 def parse_mecab(block): res = [] for line in block.split('\n'): if line == '': return res (s…
問題文 nlp100.github.io 問題の概要 本章では、MeCabを用いて形態素解析した結果を読み込んでいきます。手始めに、以下コマンドでファイルに対して形態素解析を実行しましょう。 mecab < ch04/neko.txt > ch04/neko.txt.mecab あとは、読み込むファイルの形…
次の記事に影響を受けて、大相撲版をやってみようと思い立ちました。 note.com 概要は次の通りです。 平成最後の「平成31年春場所」で優勝した白鵬を、令和開始時の「王者」とする 令和になってからの取り組みで「王者」に勝利した力士を次の「王者」とする …
「Sports Analyst Meetup #7」を、4月16日に開催しました。昨今の情勢を受け、7回目にして初めてのオンライン開催となりました。250名以上の申し込みがあり、だいたい170人程度にご参加いただきました。 spoana.connpass.com 発表内容 今回は4名の方にLTをし…
問題文 nlp100.github.io 問題の概要 「28. MediaWikiマークアップの除去」を改変します。国旗画像のURLを取得を除去する関数「get_url()」を定義し適用します。 import re import requests import pandas as pd def remove_stress(dc): r = re.compile("'+"…
問題文 nlp100.github.io 問題の概要 「27. 内部リンクの除去」を改変します。MediaWikiマークアップを除去する関数「remove_mk()」を定義し適用します。 import re import pandas as pd def remove_stress(dc): r = re.compile("'+") return {k: r.sub('', …
問題文 nlp100.github.io 問題の概要 「26. 強調マークアップの除去」を改変します。内部リンクを除去する関数「remove_inner_links()」を定義し適用します。 import re import pandas as pd def remove_stress(dc): r = re.compile("'+") return {k: r.sub(…
問題文 nlp100.github.io 問題の概要 「25. テンプレートの抽出」を改変します。強調マークアップを除去する関数「remove_stress()」を定義し適用します。 import re import pandas as pd def remove_stress(dc): r = re.compile("'+") return {k: r.sub('',…
問題文 nlp100.github.io 問題の概要 この辺りから、正規表現芸人っぽくなってきます。Wikipediaの「基礎情報」テンプレートの書き方*1が参考になります。 import re import pandas as pd df = pd.read_json('ch03/jawiki-country.json.gz', lines=True) uk_…
問題文 nlp100.github.io 問題の概要 正規表現を用いて、参照されているメディアファイルに該当する箇所を取り出します。 import re import pandas as pd df = pd.read_json('ch03/jawiki-country.json.gz', lines=True) uk_text = df.query('title=="イギリ…
問題文 nlp100.github.io 問題の概要 正規表現を用いて、セクションに該当する箇所を取り出します。 import re import pandas as pd df = pd.read_json('ch03/jawiki-country.json.gz', lines=True) uk_text = df.query('title=="イギリス"')['text'].values…
問題文 nlp100.github.io 問題の概要 「21. カテゴリ名を含む行を抽出」で取り出した行から、余計な部分を「replace()」で削除します。 import pandas as pd df = pd.read_json('ch03/jawiki-country.json.gz', lines=True) uk_text = df.query('title=="イ…