通过创建字典替换单词
Replacing words by creating a dictionary
我有一个要在数据集中替换的单词列表:
my_dict = {
"positivi": "positivo",
"positiva": "positivo",
"lavori": "lavoro",
"nuova":"nuovo",
"nuovi": "nuovo",
"nuove": "nuovo",
}
为了做到这一点,我尝试了以下方法:
import nltk
a = df['Title'].str.lower().str.cat(sep=' ')
words = nltk.tokenize.word_tokenize(a)
word_dist = nltk.FreqDist(words)
df_1 = pd.DataFrame(word_dist.most_common(1000),
columns=['Word', 'Frequency'])
df_1 = df_1.Word.replace(my_dict,inplace=True) # the problem is here. This returns an empty df_1
df_1 = df_1[df_1['Word'].str.len()>3]
list_of_words=["dopo","entro","fare","fanno","loro","indietro","insieme","avranno","7115","allo","anche","cosa","dalle","dall","dagli","dentro","secondo","sempre",'siamo','sarà','sarebbe','troppi','tutti','verso','sotto','stesso','sulle','2018','ogni','oggi','nell','nelle','niente','queste','meno','alle','sulla','contro','come','per', 'della','sono','dell','solo','quali','quasi','ecco','ancora']
df_1 = df_1.groupby(['Word'], as_index=False).sum()
df_1 = df_1[~ df_1.Word.str.contains('|'.join(list_of_words), case=False)]
df_1.sort_values(by=['Frequency'], ascending=False).to_csv("path/my_dict.csv")
但是它并没有替换文本中的任何内容。例如:
Title
Una notizia positiva dopo tanto tempo
Quali lavori svolgi?
我应该期望用替换的词和新的频率在 csv 中创建一个新词典。但实际上我打印了相同的旧列表。
你能告诉我我的代码有什么问题吗?
一些数据样本
0 Torna la domenica al museo: l'iniziativa positiva...
1 Torino, lettera di un boss ai giovani: “Non f...
2 Gli studenti italiani non capiscono i lavori...
3 Offerte nuovi lavori: le principali posizion...
...
我可以猜到问题是 inplace=True。这将就地更新日期框架并且return什么都没有。
不知道还有没有其他问题,没有df的样本数据无法测试
import nltk
nltk.download('punkt')
import pandas as pd
data = (['Torna la domenica al museo: l\'iniziativa positiva',
'Torino, lettera di un boss ai giovani: “Non f...',
'Gli studenti italiani non capiscono i lavori...',
'Offerte nuovi lavori: le principali posizion...'])
my_dict = {
"positivi": "positivo",
"positiva": "positivo",
"lavori": "lavoro",
"nuova":"nuovo",
"nuovi": "nuovo",
"nuove": "nuovo",
}
df = pd.DataFrame(data, columns=['Title'])
a = df['Title'].str.lower().str.cat(sep=' ')
words = nltk.tokenize.word_tokenize(a)
word_dist = nltk.FreqDist(words)
df_1 = pd.DataFrame(word_dist.most_common(1000),
columns=['Word', 'Frequency'])
df_1.Word = df_1.Word.replace(my_dict)
df_1 = df_1[df_1['Word'].str.len()>3]
list_of_words=["dopo","entro","fare","fanno","loro","indietro","insieme","avranno","7115","allo","anche","cosa","dalle","dall","dagli","dentro","secondo","sempre",'siamo','sarà','sarebbe','troppi','tutti','verso','sotto','stesso','sulle','2018','ogni','oggi','nell','nelle','niente','queste','meno','alle','sulla','contro','come','per', 'della','sono','dell','solo','quali','quasi','ecco','ancora']
df_1 = df_1.groupby(['Word'], as_index=False).sum()
df_1 = df_1[~ df_1.Word.str.contains('|'.join(list_of_words), case=False)]
df_1.sort_values(by=['Frequency'], ascending=False).to_csv("64671179.csv")
csv 文件包含:
,Word,Frequency
6,lavoro,2
0,boss,1
9,nuovo,1
15,torino,1
14,studenti,1
13,principali,1
12,posizion,1
11,positivo,1
10,offerte,1
8,museo,1
我有一个要在数据集中替换的单词列表:
my_dict = {
"positivi": "positivo",
"positiva": "positivo",
"lavori": "lavoro",
"nuova":"nuovo",
"nuovi": "nuovo",
"nuove": "nuovo",
}
为了做到这一点,我尝试了以下方法:
import nltk
a = df['Title'].str.lower().str.cat(sep=' ')
words = nltk.tokenize.word_tokenize(a)
word_dist = nltk.FreqDist(words)
df_1 = pd.DataFrame(word_dist.most_common(1000),
columns=['Word', 'Frequency'])
df_1 = df_1.Word.replace(my_dict,inplace=True) # the problem is here. This returns an empty df_1
df_1 = df_1[df_1['Word'].str.len()>3]
list_of_words=["dopo","entro","fare","fanno","loro","indietro","insieme","avranno","7115","allo","anche","cosa","dalle","dall","dagli","dentro","secondo","sempre",'siamo','sarà','sarebbe','troppi','tutti','verso','sotto','stesso','sulle','2018','ogni','oggi','nell','nelle','niente','queste','meno','alle','sulla','contro','come','per', 'della','sono','dell','solo','quali','quasi','ecco','ancora']
df_1 = df_1.groupby(['Word'], as_index=False).sum()
df_1 = df_1[~ df_1.Word.str.contains('|'.join(list_of_words), case=False)]
df_1.sort_values(by=['Frequency'], ascending=False).to_csv("path/my_dict.csv")
但是它并没有替换文本中的任何内容。例如:
Title
Una notizia positiva dopo tanto tempo
Quali lavori svolgi?
我应该期望用替换的词和新的频率在 csv 中创建一个新词典。但实际上我打印了相同的旧列表。
你能告诉我我的代码有什么问题吗?
一些数据样本
0 Torna la domenica al museo: l'iniziativa positiva...
1 Torino, lettera di un boss ai giovani: “Non f...
2 Gli studenti italiani non capiscono i lavori...
3 Offerte nuovi lavori: le principali posizion...
...
我可以猜到问题是 inplace=True。这将就地更新日期框架并且return什么都没有。
不知道还有没有其他问题,没有df的样本数据无法测试
import nltk
nltk.download('punkt')
import pandas as pd
data = (['Torna la domenica al museo: l\'iniziativa positiva',
'Torino, lettera di un boss ai giovani: “Non f...',
'Gli studenti italiani non capiscono i lavori...',
'Offerte nuovi lavori: le principali posizion...'])
my_dict = {
"positivi": "positivo",
"positiva": "positivo",
"lavori": "lavoro",
"nuova":"nuovo",
"nuovi": "nuovo",
"nuove": "nuovo",
}
df = pd.DataFrame(data, columns=['Title'])
a = df['Title'].str.lower().str.cat(sep=' ')
words = nltk.tokenize.word_tokenize(a)
word_dist = nltk.FreqDist(words)
df_1 = pd.DataFrame(word_dist.most_common(1000),
columns=['Word', 'Frequency'])
df_1.Word = df_1.Word.replace(my_dict)
df_1 = df_1[df_1['Word'].str.len()>3]
list_of_words=["dopo","entro","fare","fanno","loro","indietro","insieme","avranno","7115","allo","anche","cosa","dalle","dall","dagli","dentro","secondo","sempre",'siamo','sarà','sarebbe','troppi','tutti','verso','sotto','stesso','sulle','2018','ogni','oggi','nell','nelle','niente','queste','meno','alle','sulla','contro','come','per', 'della','sono','dell','solo','quali','quasi','ecco','ancora']
df_1 = df_1.groupby(['Word'], as_index=False).sum()
df_1 = df_1[~ df_1.Word.str.contains('|'.join(list_of_words), case=False)]
df_1.sort_values(by=['Frequency'], ascending=False).to_csv("64671179.csv")
csv 文件包含:
,Word,Frequency
6,lavoro,2
0,boss,1
9,nuovo,1
15,torino,1
14,studenti,1
13,principali,1
12,posizion,1
11,positivo,1
10,offerte,1
8,museo,1