Normalizace slov pro analýzu sentimentu

0

Otázka

Já jsem v současné době dělá, analýza sentimentu a má problém.

Mám velký normalizace pro slovo, a chci, aby normalizace textu před tokenize jako tento příklad:

údaje normální
kamu sayang knp kamu sayang kenapa
možnost drpd sedih zašívání belajar dari pada sedih zašívání belajar
dmna sekarang di mana sekarang
  • knp: kenapa
  • možnost drpd: dari pada
  • dmna: di mana

Tohle je můj kód:

import pandas as pd

slang = pd.DataFrame({'before': ['knp', 'dmna', 'drpd'], 'after': ['kenapa', 'di mana', 'dari pada']})
df = pd.DataFrame({'data': ['kamu knp sayang', 'drpd sedih mending bermain']})
                  
normalisasi = {}

for index, row in slang.iterrows():
  if row[0] not in normalisasi:
    normalisasi[row[0]] = row[1]


def normalized_term(document):
    return [normalisasi[term] if term in normalisasi else term for term in document]

df['normal'] = df['data'].apply(normalized_term)
df

Ale výsledek, jako je tento: výsledek

Chci výsledek, jako je například stůl.

nlp pandas python
2021-11-21 17:08:13
1

Nejlepší odpověď

1

K dispozici je nástroj s názvem str.replace v pandy, která nám umožňuje nahradit řetězec s jiným, nebo dokonce najít/nahradit vzory. Můžete najít kompletní dokumentaci zde. Požadovaný výstup by se objevily, jako je tento:

AKTUALIZACE

Tam byly dvě věci špatně odpověď:

  1. Musíte jen nahradit v whole word režim, ne subword
  2. Po každém vstupu do slangu soubor musíte keep the changes ne zahodit

Takže to bude takhle:

import pandas as pd
df = pd.read_excel('data bersih.xlsx')
slang = pd.read_excel('slang.xlsx')
df['normal'] = df.text
for idx, row in slang.iterrows():
    df['normal'] = df.normal.str.replace(r"\b"+row['before']+r"\b", row['after'], regex=True)

výstup:

                                                   text  \
0                           hari ini udh mulai ppkm yaa   
1     mohon info apakah pgs pasar turi selama ppkm b...   
2     di rumah aja soalnya lagi ppkm entah bakal nga...   
3     pangkal penanganan pandemi di indonesia yang t...   
4                              ppkm mikro anjingggggggg   
...                                                 ...   
9808  drpd nonton sinetron mending bagi duit kayak g...   
9809                     ppkm pelan pelan kalau masukin   
9810  masih ada kepala desa camat bahkan kepala daer...   
9811            aku suka ppkm tapi tanpa pp di depannya   
9812  menteri ini perlu tidak dibayarkan gajinya set...   

                                                 normal  
0                         hari ini sudah mulai ppkm yaa  
1     mohon informasi apakah pgs pasar turi selama p...  
2     di rumah saja soalnya lagi ppkm entah bakal se...  
3     pangkal penanganan pandemi di indonesia yang t...  
4                              ppkm mikro anjingggggggg  
...                                                 ...  
9808  dari pada nonton sinema elektronik lebih baik ...  
9809                    ppkm pelan pelan kalau masukkan  
9810  masih ada kepala desa camat bahkan kepala daer...  
9811  aku suka ppkm tapi tanpa pulang pergi di depannya  
9812  menteri ini perlu tidak dibayarkan gajinya set...  

[9813 rows x 2 columns]
2021-11-23 13:11:58

Váš kód funguje dobře, ale nemůže normalizovat všechny mé údaje. Když se podívám mé údaje po normalizovat, některé údaje jsou normalizovány a některé nejsou. Já nevím, proč.
caeruleum

Prosím, přidejte slang a df v které bychom tváří v tvář chyba! @teapartyyyy
meti

po normalizovat můžete vidět v řádku číslo 0 slovo 'udh', které by 'sudah' není normalizovat. A můžete vidět v řádku číslo 9808 slovo 'možnost drpd', které by 'dari pada' je správné. Dal jsem slang data v aplikaci Excel slang.xlsx
caeruleum

Prosím, zkontrolujte překlepy. Nemohl jsem přijít na to, co se stalo! Přidejte svůj slang a údaje ve formě můžu kopírovat/vložit. Další věc, která se může stát je zdrojem řetězce obsahuje speciální znaky s stejný vzhled, ale různé Unicode! @teapartyyyy
meti

tady github
caeruleum

Aktualizoval jsem odpověď @teapartyyyy, zkontrolujte si to ;)
meti

Děkuji moc! Mě to pomohlo. :)
caeruleum

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................