用于情感分析的归一化词
Normalization words for sentiment analysis
我目前正在做情绪分析,但遇到了问题。
我对单词进行了很大的规范化,我想在标记化之前对文本进行规范化,就像这个例子一样:
data
normal
kamu knp sayang
kamu kenapa sayang
drpd sedih mending belajar
dari pada sedih mending belajar
dmna sekarang
di mana sekarang
- knp: 肯纳巴
- drpd: 达里帕达
- dmna: di mana
这是我的代码:
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
但是,结果是这样的:
result
我想要示例中的结果 table。
pandas 中有一个名为 str.replace
的实用程序,它允许我们用另一个甚至 find/replace 模式替换子字符串。您可以找到完整的文档 here。您想要的输出将如下所示:
更新
答案有两处错误:
- 您只能在
whole word
模式下替换,而不是 subword
- 在俚语文件中的每个条目之后,您必须
keep the changes
不能丢弃它们
所以它会是这样的:
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)
输出:
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]
我目前正在做情绪分析,但遇到了问题。
我对单词进行了很大的规范化,我想在标记化之前对文本进行规范化,就像这个例子一样:
data | normal |
---|---|
kamu knp sayang | kamu kenapa sayang |
drpd sedih mending belajar | dari pada sedih mending belajar |
dmna sekarang | di mana sekarang |
- knp: 肯纳巴
- drpd: 达里帕达
- dmna: di mana
这是我的代码:
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
但是,结果是这样的: result
我想要示例中的结果 table。
pandas 中有一个名为 str.replace
的实用程序,它允许我们用另一个甚至 find/replace 模式替换子字符串。您可以找到完整的文档 here。您想要的输出将如下所示:
更新
答案有两处错误:
- 您只能在
whole word
模式下替换,而不是subword
- 在俚语文件中的每个条目之后,您必须
keep the changes
不能丢弃它们
所以它会是这样的:
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)
输出:
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]