Menghitung daftar kata dalam daftar string menggunakan python

Jadi saya memiliki kerangka data pandas dengan deretan string yang diberi token di kolom bernama story. Saya juga memiliki daftar kata dalam daftar yang disebut kata_pilihan. Saya mencoba menghitung kemunculan salah satu kata_yang dipilih di setiap baris di kolom cerita.

Kode yang saya gunakan sebelumnya yang berhasil adalah

CCwordsCount=df4.story.str.count('|'.join(selected_words))

Ini sekarang memberi saya nilai NaN untuk setiap baris.

Di bawah ini adalah beberapa baris pertama kolom story di df4. Kerangka data berisi lebih dari 400 baris Artikel NYTimes.

0      [it, was, a, curious, choice, for, the, good, ...
1      [when, he, was, a, yale, law, school, student,...
2      [video, bitcoin, has, real, world, investors, ...
3      [bitcoin, s, wild, ride, may, not, have, been,...
4      [amid, the, incense, cheap, art, and, herbal, ...
5      [san, francisco, eight, years, ago, ernie, all...

Ini adalah daftar kata_yang dipilih

selected_words = ['accept', 'believe', 'trust', 'accepted', 'accepts', 'trusts', 'believes', \
                  'acceptance', 'trusted', 'trusting', 'accepting', 'believes', 'believing', 'believed',\
                 'normal', 'normalize', ' normalized', 'routine', 'belief', 'faith', 'confidence', 'adoption', \
                  'adopt', 'adopted', 'embrace', 'approve', 'approval', 'approved', 'approves']

Tautan ke file .csv df4 saya


person Jesse-Burton Nicholson    schedule 13.05.2020    source sumber
comment
Apakah setiap entri cerita merupakan daftar yang berisi string seperti pada ["it, was, a, curious, choice, for, the, good, ..."]?   -  person DarrylG    schedule 13.05.2020
comment
Ya, saya yakin setiap entri adalah daftar kata. Saya menggunakan .split untuk memisahkan kalimat menjadi kata-kata. Penghitungannya perlu dikaitkan dengan setiap entri karena saya mengkorelasikan penghitungan tersebut dengan data lain dari tanggal yang sama dengan cerita.   -  person Jesse-Burton Nicholson    schedule 13.05.2020


Jawaban (2)


Setiap entri cerita tampak seperti daftar yang berisi string.

Gunakan peta untuk mendapatkan string dari daftar sebelum menerapkan str sebagai berikut.

CCwordsCount = df4.story.map(lambda x: ''.join(x[1:-1])).str.count('|'.join(selected_words))

print(CCwordsCount.head(20))   # Show first 20 story results

Keluaran

0      1
1      2
2      5
3      7
4      0
5      1
6     10
7      8
8      2
9      2
10     8
11     0
12     0
13     2
14     0
15     4
16     2
17     9
18     0
19     0
Name: story, dtype: int64

Penjelasan

Setiap cerita ada dalam daftar yang dikonversi menjadi string, jadi pada dasarnya:

"['it', 'was', 'a', 'curious', 'choice', 'for', 'the', 'good', 'wife', ...]"

Dikonversi menjadi daftar kata dengan menghilangkan '[' dan ']' dan menggabungkan kata

map(lambda x: ''.join(x[1:-1]))

Hal ini menghasilkan kata-kata yang dipisahkan dengan koma dalam tanda kutip. Untuk baris pertama ini menghasilkan string:

'it', 'was', 'a', 'curious', 'choice', 'for', ...
person DarrylG    schedule 13.05.2020
comment
@ Jesse-BurtonNicholson Periksa salah satu cerita Anda. Apakah ada kata-kata yang dipilih? - person DarrylG; 13.05.2020
comment
Ya, ada lebih dari 400 cerita dan sebagian besar berisi setidaknya satu dari kata_yang dipilih - person Jesse-Burton Nicholson; 13.05.2020
comment
@ Jesse-BurtonNicholson--versi singkat dari cerita yang Anda berikan tidak memiliki kata-kata yang dipilih. Bisakah Anda memberi saya lebih banyak cerita untuk diuji? Selain itu, saat saya menambahkan beberapa kata dari cerita di postingan Anda ke kata yang dipilih, maka saya mendapatkan hitungan bukan nol. - person DarrylG; 13.05.2020
comment
Saya telah memperbarui postingan dengan tautan ke file .csv yang diekspor untuk df4 - person Jesse-Burton Nicholson; 13.05.2020
comment
BTW, Terima kasih banyak atas bantuan Anda dalam hal ini. Kode saya berfungsi pada akhir tahun lalu dan saya baru saja kembali untuk memperbarui proyek dan tidak berhasil, ini sangat membuat frustrasi. - person Jesse-Burton Nicholson; 13.05.2020
comment
@ Jesse-BurtonNicholson--senang membantu. Jangan lupa apa yang harus dilakukan ketika seseorang menjawab pertanyaan saya - person DarrylG; 13.05.2020

Fungsi .find() dapat bermanfaat. Dan hal ini dapat diterapkan dengan berbagai cara. Jika Anda tidak memiliki tujuan lain untuk artikel mentah dan itu bisa berupa sekumpulan string. Kemudian coba ini, Anda juga dapat memasukkannya ke dalam kamus dan mengulanginya.

def find_words(text, words):
    return [word for word in words if word in text]

sentences = "0  [it, was, a, curious, choice, for, the, good, 1      [when, he, was, a, yale, law, school, student, 2      [video, bitcoin, has, real, world, investors, 3      [bitcoin, s, wild, ride, may, not, have, been, 4      [amid, the, incense, cheap, art, and, herbal, 5      [san, francisco, eight, years, ago, ernie, all"

search_keywords=['accept', 'believe', 'trust', 'accepted', 'accepts', 'trusts', 'believes', \
                  'acceptance', 'trusted', 'trusting', 'accepting', 'believes', 'believing', 'believed',\
                 'normal', 'normalize', ' normalized', 'routine', 'belief', 'faith', 'confidence', 'adoption', \
                  'adopt', 'adopted', 'embrace', 'approve', 'approval', 'approved', 'approves', 'good']

found = find_words(sentences, search_keywords)

print(found)

Catatan: Saya tidak memikirkan kerangka data panda saat saya membuat ini.

person parlad    schedule 13.05.2020