NLP_WSD / flow.py
gkc55's picture
Add Flask-based Word Sense Disambiguation Tool with Enhanced Lesk Algorithm
3fe126f
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
from matplotlib.sankey import Sankey
# Create a flowchart using matplotlib with boxes and arrows
def draw_flowchart():
fig, ax = plt.subplots(figsize=(12, 10))
ax.axis('off')
# Define boxes with text
boxes = {
'start': (0.4, 0.9, 0.2, 0.05, 'Start: Input Sentence and Target Word'),
'pos_tag': (0.4, 0.82, 0.2, 0.05, 'POS Tagging of Target Word'),
'get_senses': (0.4, 0.74, 0.2, 0.05, 'Get WordNet Senses (Filtered by POS)'),
'process_context': (0.4, 0.66, 0.2, 0.05, 'Process Context with Positional Weighting'),
'check_collocations': (0.4, 0.58, 0.2, 0.05, 'Check for Collocations'),
'apply_rules': (0.4, 0.5, 0.2, 0.05, 'Apply Rule-Based Boosting'),
'calculate_overlap': (0.4, 0.42, 0.2, 0.05, 'Calculate Overlap Score (Lesk)'),
'bert_similarity': (0.4, 0.34, 0.2, 0.05, 'Calculate BERT Semantic Similarity'),
'feedback_boost': (0.4, 0.26, 0.2, 0.05, 'Apply Feedback Boost'),
'combine_scores': (0.4, 0.18, 0.2, 0.05, 'Combine Scores with Weights'),
'select_best': (0.4, 0.1, 0.2, 0.05, 'Select Best Sense and Alternatives'),
'end': (0.4, 0.02, 0.2, 0.05, 'End: Return Disambiguation Result')
}
# Draw boxes
for key, (x, y, w, h, text) in boxes.items():
rect = plt.Rectangle((x, y), w, h, fill=True, edgecolor='black', facecolor='#cce5ff')
ax.add_patch(rect)
ax.text(x + w/2, y + h/2, text, ha='center', va='center', fontsize=10, wrap=True)
# Draw arrows between boxes
def draw_arrow(start_key, end_key):
x_start, y_start, w_start, h_start, _ = boxes[start_key]
x_end, y_end, w_end, h_end, _ = boxes[end_key]
ax.annotate('', xy=(x_end + w_end/2, y_end + h_end), xytext=(x_start + w_start/2, y_start),
arrowprops=dict(arrowstyle='->', lw=1.5))
flow_sequence = [
'start', 'pos_tag', 'get_senses', 'process_context', 'check_collocations',
'apply_rules', 'calculate_overlap', 'bert_similarity', 'feedback_boost',
'combine_scores', 'select_best', 'end'
]
for i in range(len(flow_sequence) - 1):
draw_arrow(flow_sequence[i], flow_sequence[i+1])
plt.title('Flowchart of Enhanced Lesk-based Word Sense Disambiguation Algorithm', fontsize=14)
plt.show()
# Draw the flowchart
draw_flowchart()