File size: 2,803 Bytes
9b5fe77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import nltk
from nltk.translate.meteor_score import meteor_score
from nltk.translate.bleu_score import corpus_bleu
from indicnlp.tokenize import indic_tokenize
import pandas as pd
import numpy as np

def configure_nltk():
    nltk.download('punkt')
    nltk.download('wordnet')

def tokenize_hindi(text):
    return indic_tokenize.trivial_tokenize(text, lang='hi')

def calculate_meteor_score(ref, output):
    ref_tokens = tokenize_hindi(ref)
    output_tokens = tokenize_hindi(output)
    return meteor_score([ref_tokens], output_tokens)

def calculate_bleu_score(ref, output):
    ref_tokens = [tokenize_hindi(ref)]
    output_tokens = tokenize_hindi(output)
    return corpus_bleu(ref_tokens, [output_tokens])

def read_hindi_data(filepath):
    hindi_df = pd.read_csv(filepath)
    hindi_df = hindi_df.replace('नेन', np.nan)
    hindi_df = hindi_df.dropna()
    return hindi_df

def create_reference_df(hindi_df):
    reference_df = pd.DataFrame()
    for i in range(1, 3):
        reference_df[f'Question{i}'] = hindi_df[f'Question{i}']
        reference_df[f'Answer{i}'] = hindi_df[f'Answer{i}']
    return reference_df

def select_first_n_rows(df, n=10):
    return df.iloc[:n]

def calculate_scores(reference_df, n=10):
    meteor_scores = []
    bleu_scores = []

    for i in range(1, 3):  
        ref_question_col = f'Question{i}'
        ref_answer_col = f'Answer{i}'
        output_question_col = f'Question{i}_hindi'
        output_answer_col = f'Answer{i}_hindi'

        for ref_question, output_question in zip(reference_df[ref_question_col], reference_df[output_question_col]):
            meteor_scores.append(calculate_meteor_score(ref_question, output_question))
            bleu_scores.append(calculate_bleu_score(ref_question, output_question))

        for ref_answer, output_answer in zip(reference_df[ref_answer_col], reference_df[output_answer_col]):
            meteor_scores.append(calculate_meteor_score(ref_answer, output_answer))
            bleu_scores.append(calculate_bleu_score(ref_answer, output_answer))

    average_meteor_score = sum(meteor_scores) / len(meteor_scores)
    average_bleu_score = sum(bleu_scores) / len(bleu_scores)
    
    return average_meteor_score, average_bleu_score

def main():
    # Configure NLTK
    configure_nltk()

    # Read Hindi data
    hindi_df = read_hindi_data('/content/Hindi_QnA.csv')

    # Create reference dataframe
    reference_df = create_reference_df(hindi_df)

    # Select first 10 rows
    reference_df_first10 = select_first_n_rows(reference_df)

    # Calculate scores
    average_meteor_score, average_bleu_score = calculate_scores(reference_df_first10)

    print("Average METEOR Score:", average_meteor_score)
    print("Average BLEU Score:", average_bleu_score)

if __name__ == "__main__":
    main()