def test_depth(self): text = 'ご飯を食べた。' analyser = Analyser(text, delimiter='。') self.assertAlmostEqual(analyser.mean_tree_depths, 1.0) text = '踊る人を見た。' analyser = Analyser(text, delimiter='。') self.assertAlmostEqual(analyser.mean_tree_depths, 2.0) text = 'エサを食べるネコを眺めた。' analyser = Analyser(text, delimiter='。') self.assertAlmostEqual(analyser.mean_tree_depths, 3.0)
def test_mean_n_mrphs(self): # 宮澤賢治「銀河鉄道の夜」より text = ("カムパネルラが手をあげました。" "それから四、五人手をあげました。" "ジョバンニも手をあげようとして、いそいでそのままやめました。") analyser = Analyser(text, delimiter='。') self.assertAlmostEqual(analyser.mean_n_mrphs, 27 / 3)
def test_mean_depth(self): text = ''.join(['ご飯を食べた。', '踊る人を見た。', 'エサを食べるネコを眺めた。']) analyser = Analyser(text, delimiter='。') self.assertAlmostEqual(analyser.mean_tree_depths, 2.0)
def test_conditional(self): sentences = ['ご飯を食べるらしい。', '晴れたならば、そして元気ならば、ご飯を食べるつもりだ。', '元気ならばご飯を食べるつもりだ。'] text = ''.join(sentences) analyser = Analyser(text, delimiter='。') r_conditional = analyser.r_conditional self.assertAlmostEqual(r_conditional, 2 / 3)
def test_modality(self): sentences = ['ご飯を食べるらしい。', 'ご飯を食べるつもりだ。', 'ご飯を食べるつもりだ。'] n = len(sentences) text = ''.join(sentences) analyser = Analyser(text, delimiter='。') modal_counts = analyser.rs_modality r_evidences = modal_counts['認識-証拠性'] r_dicisions = modal_counts['意志'] self.assertAlmostEqual(r_evidences, 1 / 3) self.assertAlmostEqual(r_dicisions, 2 / 3)
def test_rs_pos(self): text = ''.join(['ご飯を食べた。', '踊る人を見た。', 'エサを食べるネコを眺めた。']) analyser = Analyser(text, delimiter='。') for k, v in analyser.rs_pos.items(): if k == "名詞": noun = v elif k == "助詞": func = v elif k == "動詞": verb = v self.assertAlmostEqual(noun, 4.0 / 13) self.assertAlmostEqual(func, 4.0 / 13) self.assertAlmostEqual(verb, 5.0 / 13)
def test_n_mrphs(self): text = ''.join(['ご飯を食べた。', '踊る人を見た。', 'エサを食べるネコを眺めた。']) analyser = Analyser(text, delimiter='。') self.assertEqual(analyser.n_mrphs, 13)
def test_n_chunks(self): text = ''.join(['ご飯を食べた。', '人を見た。']) analyser = Analyser(text, delimiter='。') self.assertEqual(analyser.n_chunks, 4)
def main(): executables = ['juman', 'knp', 'rnnlm'] for e in executables: check_executable(e) parser = argparse.ArgumentParser() parser.add_argument('-f', '--filename', type=str, help='target text') parser.add_argument('--delimiter', type=str, default='\n', help='features to calculate') parser.add_argument('-m', '--rnnlm-model-path', type=str, default='data/jawiki-20160818-100M-words', help='RNNLM model path') parser.add_argument('--output-lang', type=str, default='ja', help='ja') args = parser.parse_args() text = '' if args.filename is not None: with open(args.filename, mode='r') as f: text = f.read().replace('\n', '') else: text = sys.stdin.read() analyser = Analyser(text, delimiter=args.delimiter) metrics = [] metrics.append(Metric('n_sentences', analyser.n_sentences)) metrics.append(Metric('mean_n_mrphs', analyser.mean_n_mrphs)) metrics.append(Metric('n_tokens', analyser.n_chunks)) metrics.append(Metric('n_types', analyser.n_types)) Section('basic', metrics).show() metrics = [] for k, v in analyser.rs_pos.items(): metrics.append(Metric('品詞:{}'.format(k), '{:.2f}'.format(v))) Section('vocabulary', metrics).show() metrics = [] metrics.append( Metric('mean_tree_depths', '{:.2f}'.format(analyser.mean_tree_depths))) metrics.append( Metric('r_conditional', '{:.2f}'.format(analyser.r_conditional))) for k, v in analyser.rs_modality.items(): metrics.append(Metric('モダリティ:{}'.format(k), '{:.2f}'.format(v))) Section('syntax', metrics).show() metrics = [] a = Acceptability(text, args.delimiter, args.rnnlm_model_path) metrics.append(Metric('log_prob', _f(a.log_prob))) metrics.append(Metric('mean_lp', _f(a.mean_lp))) metrics.append(Metric('norm_lp_div', _f(a.norm_lp_div))) metrics.append(Metric('norm_lp_sub', _f(a.norm_lp_sub))) metrics.append(Metric('slor', _f(a.slor))) Section('language_model', metrics).show()