Dataset:mot de match, quel que soit le cas
> df
Id Clean_Data
1918916 Luxury Apartments consisting 11 towers Well equipped gymnasium Swimming Pool Toddler Pool Health Club Steam Room Sauna Jacuzzi Pool Table Chess Billiards room Carom Table Tennis indoor games
1495638 near medavakkam junction calm area near global hospital
1050651 No Pre Emi No Booking Amount No Floor Rise Charges No Processing Fee HLPROJECT HIGHLIGHTS
est Ci-dessous le code qui revient avec succès les mots correspondants dans ngrams de la liste des valeurs dans Category.py
df['one_word_tokenized_text'] =df["Clean_Data"].str.split()
df['bigram'] = df['Clean_Data'].apply(lambda row: list(ngrams(word_tokenize(row), 2)))
df['trigram'] = df['Clean_Data'].apply(lambda row: list(ngrams(word_tokenize(row), 3)))
df['four_words'] = df['Clean_Data'].apply(lambda row: list(ngrams(word_tokenize(row), 4)))
token=pd.Series(df["one_word_tokenized_text"])
Lid=pd.Series(df["Id"])
matches= token.apply(lambda x: pd.Series(x).str.extractall("|".join(["({})".format(cat) for cat in Categories.HealthCare])))
match_list= [[m for m in match.values.ravel() if isinstance(m, str)] for match in matches]
match_df = pd.DataFrame({"ID":Lid,"jc1":match_list})
def match_word(feature, row):
categories = []
for bigram in row.bigram:
joined = ' '.join(bigram)
if joined in feature:
categories.append(joined)
for trigram in row.trigram:
joined = ' '.join(trigram)
if joined in feature:
categories.append(joined)
for fourwords in row.four_words:
joined = ' '.join(fourwords)
if joined in feature:
categories.append(joined)
return categories
match_df['Health1'] = df.apply(partial(match_word, HealthCare), axis=1)
match_df['HealthCare'] = match_df[match_df.columns[[1,2]]].apply(lambda x: ','.join(x.dropna().astype(str)),axis=1)
Catégorie.py
category = [('steam room','IN','HealthCare'),
('sauna','IN','HealthCare'),
('Jacuzzi','IN','HealthCare'),
('Aerobics','IN','HealthCare'),
('yoga room','IN','HealthCare'),]
HealthCare= [e1 for (e1, rel, e2) in category if e2=='HealthCare']
Sortie:
ID HealthCare
1918916 Jacuzzi
1495638
1050651 Aerobics, Jacuzzi, yoga room
ici si je mentionne les caractéristiques dans « la liste de la catégorie » dans le cas précis lettre comme mentionné dans l'ensemble de données, le code identifie et renvoie la valeur, sinon ça ne va pas. Donc, je veux que mon code soit insensible à la casse et même suivre "Steam Room", "Sauna" dans la catégorie de la santé. J'ai essayé avec ".lower()" fonction, mais je ne suis pas sûr de la façon de l'implémenter.
Non, je ne suis pas censé modifier mes valeurs de jeu de données. Je veux juste faire correspondre les mots avec les valeurs de catégorie indépendamment du cas. –
bien que vous ajoutiez déjà des colonnes à votre jeu de données, je viens d'éditer ma réponse de la façon dont je le vois vous pouvez: - a) faire tout en bas/haut pour les 3 colonnes que vous créez et tester uniquement avec majuscules - b) essayez de reproduire (en utilisant le code python) tous les formats de majuscules possibles dans votre Category.py ce dernier semble être exagéré. – Pelican
Désolé si ma question est confuse, je comprends votre point, mais mon souci est, mon cas de valeur de sortie finale ne devrait pas différer de ce que j'ai reçu dans l'ensemble de données. Si "Sauna", "Steam Room" ont des InitialCaps, la même chose doit être présentée en sortie. Je veux simplement dire que, si mon jeu de données contient des mots similaires à l'avenir avec des majuscules ou des minuscules, alors mon code doit être insensible à la casse pour le détecter. :) –