Skip to content

Instantly share code, notes, and snippets.

@andrea-dagostino
Created October 8, 2022 13:47
Show Gist options
  • Save andrea-dagostino/61786ac1047a7b46159a298b75835bff to your computer and use it in GitHub Desktop.
Save andrea-dagostino/61786ac1047a7b46159a298b75835bff to your computer and use it in GitHub Desktop.
fuzzy_logic_tagging
from thefuzz import fuzz, process
import pandas as pd
# definiamo le categorie che vogliamo applicare
tags = [
"machine learning",
"clustering",
"carriera",
"progetto",
"consigli",
"analytics",
"deep learning",
'nlp',
]
# carichiamo un dataset e isoliamo i post
df = pd.read_csv('dataset.csv')
posts = df[df.url.str.contains('post')]
posts.reset_index(inplace=True, drop=True)
articles = list(posts.article)
def fuzzy_tagging(tags, articles):
"""
Questa funzione riceve in input una lista di tag predefiniti e la lista di contenuto testuale da taggare.
Restituisce un dataframe Pandas con gli articoli taggati
"""
results = []
# ciclo nei tag
for i, tag in enumerate(tags):
d = {}
ranking = process.extract(tag, articles, limit=4)
for r in ranking:
d = {"tag": tag, "index": articles.index(r[0]), "confidence": r[1]}
results.append(d)
# organizziamo tutto in un df pandas
raw_tags = pd.DataFrame(results)
raw_tags.set_index('index', inplace=True, drop=True)
d = {}
for i, row in raw_tags.iterrows():
if d.get(i):
if row['confidence'] >= 55: # se la soglia supera il valore di 55, aggiungere il tag a quelli esistenti se è già presente un tag
d[i] += ', ' + str(row['category'])
else:
d[i] = str(row['category'])
# creiamo il dataset finale
tags = pd.Series(d, name='tag')
tagged_df = pd.concat([posts, tags], axis=1)
return tagged_df
tagged_df = fuzzy_tagging(tags=tags, articles=articles)
tagged_df
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment