Example #1
0
    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)
Example #2
0
 def test_mean_n_mrphs(self):
     # 宮澤賢治「銀河鉄道の夜」より
     text = ("カムパネルラが手をあげました。"
             "それから四、五人手をあげました。"
             "ジョバンニも手をあげようとして、いそいでそのままやめました。")
     analyser = Analyser(text, delimiter='。')
     self.assertAlmostEqual(analyser.mean_n_mrphs, 27 / 3)
Example #3
0
    def test_mean_depth(self):

        text = ''.join(['ご飯を食べた。',
                        '踊る人を見た。',
                        'エサを食べるネコを眺めた。'])
        analyser = Analyser(text, delimiter='。')
        self.assertAlmostEqual(analyser.mean_tree_depths, 2.0)
Example #4
0
    def test_conditional(self):

        sentences = ['ご飯を食べるらしい。',
                     '晴れたならば、そして元気ならば、ご飯を食べるつもりだ。',
                     '元気ならばご飯を食べるつもりだ。']
        text = ''.join(sentences)

        analyser = Analyser(text, delimiter='。')
        r_conditional = analyser.r_conditional

        self.assertAlmostEqual(r_conditional, 2 / 3)
Example #5
0
    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)
Example #6
0
    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)
Example #7
0
 def test_n_mrphs(self):
     text = ''.join(['ご飯を食べた。',
                     '踊る人を見た。',
                     'エサを食べるネコを眺めた。'])
     analyser = Analyser(text, delimiter='。')
     self.assertEqual(analyser.n_mrphs, 13)
Example #8
0
 def test_n_chunks(self):
     text = ''.join(['ご飯を食べた。',
                     '人を見た。'])
     analyser = Analyser(text, delimiter='。')
     self.assertEqual(analyser.n_chunks, 4)
Example #9
0
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()