Bot filsuf untuk vk.com

Berdasarkan banyak artikel yang dikhususkan untuk botovodam ...

Baru-baru ini saya mengembangkan "turnkey" satu proyek menarik yang didedikasikan untuk jejaring sosial vk.com. Tugasnya sederhana - untuk membuat bot yang dapat ditambahkan ke percakapan dan yang akan memberikan kutipan acak. Tapi sepertinya terlalu sederhana, jadi saya harus menghidupkan kembali filsuf besar Friedrich Nietzsche, yang akan membuat bot dari bot - overbot ...

gambar

Saya tidak melihat sesuatu yang rumit dalam hal ini, jadi naskah semacam ini dengan cepat ditulis:
Otorisasi -> membaca pesan -> menganalisis dan menghasilkan respons -> respons
Semua ini dilakukan dengan menggunakan Callback API VK v.5.80 ( tidak ada yang baru )
Poin yang paling sulit adalah "analisis dan pembentukan respons". Memang ini yang paling penting.
Tetapi kenyataannya adalah bahwa saya ingin membuat "bot kurang lebih pintar" daripada yang hanya akan mengeluarkan frase acak dari kamus.

"Bagaimana saya melakukannya dan berhasil?" - tolong baca ...

Jadi, mari kita mulai!

Pada prinsipnya, bot memiliki fungsi yang cukup sederhana, tetapi sederhana hanya secara dangkal. Jika Anda masuk lebih dalam, maka semuanya jauh lebih rumit, karena kami akan menulis dalam PHP ( )

Saya ulangi bahwa saya tidak hanya memerlukan generator kutipan, jadi saya memutuskan untuk menanyakan bot beberapa logika. Namun, saya juga tidak memerlukan jaringan saraf, karena belajar adalah tugas yang menakutkan.

Saya memecahkan masalah dengan kreativitas ketika saya mencoba menghidupkan kembali filsuf besar abad XIX - Friedrich Nietzsche.

Ya, Nietzsche-lah yang akan berperan sebagai bot, dan karenanya bahkan kutipan acak pun akan tampak lebih pintar.
Tapi saya ingin entah bagaimana menyatukan lawan bicara dan bot, membuat koneksi di antara mereka ...

Jadi, frasa lawan bicara diambil sebagai dasar, yang diubah oleh filter menjadi kata kunci, di mana kalimat dari basis yang disiapkan sebelumnya ditemukan.

Dengan demikian, seolah-olah jawaban atas pertanyaan si penanya terbentuk.

Saya menerima pesan baru dari pengguna seperti ini:

//  case 'message_new': //... id   $user_id = $data->object->peer_id; //   $body = $data->object->text; 

Dan kemudian dia membawa pesan dalam bentuk yang sesuai untuk menyorot kata kunci dan memasukkannya ke dalam pencarian basis data.

Pertama, saya benar-benar menyingkirkan ujung " a, dan, s, am, yami, ah, oh ... " dan seterusnya ... saya menghapus tanda baca dan simbol lainnya.

Kedua, saya tidak memperhitungkan preposisi akun. Pertama, saya membatasi kata-kata hanya sampai 3 huruf. Tetapi ini salah, karena filosofi Nietzsche dicirikan oleh kata-kata seperti: " dewa, dunia, batu, abad, dll .". Selain itu, setelah menyaring kata-kata dari empat huruf, ada kata-kata dari tiga huruf, karena ujungnya dibuang. Kemudian saya hanya membatasi pencarian saya untuk kata-kata seperti: " lebih, apa, tentang, bagaimana, di mana, dll ".

Ketiga, Nietzsche menulis lebih banyak dalam bukunya sendiri, oleh karena itu ia mengganti kata-kata yang masuk seperti " milikmu, milikmu, kamu, cinta, kamu dapat" dengan "milikku, milikku, aku cinta, aku bisa, " masing-masing.

Dengan demikian, semacam dialog diperoleh.

Berikutnya - diperlukan untuk membuat basis, kamus frasa / kutipan / pernyataan dari fragmen buku-buku Nietzsche.

Saya mengunduh buku-buku Nietzsche dalam format txt dari liter. Kumpulkan mereka dan saring:

1 kutipan = 1 kalimat ( menggunakan pembatas sebagai ".", "! ',"? " )

Ternyata dasarnya adalah tentang jenis ini:

- , , -
, , , ,
, , : ,
,


Ya, ada database dan pesan yang difilter dari pengguna.

: ", ?"
: " "


Masih untuk mempercepat sistem pencarian. Itu sulit dengan ini, karena pengaturan yang berbeda memberikan hasil yang berbeda. Dan jika satu kode memberikan jawaban yang benar, maka permintaan lainnya tidak memberikan apa yang dibutuhkan.

Diputuskan untuk tidak menggunakan ekspresi reguler, melainkan menggunakannya bersama dengan fungsi bawaan seperti:

substr
stripos
substr_count


dan fitur teks lainnya ...

Dengan bantuan kondisi perbandingan yang panjang dan siklus yang sangat panjang, saya mencapai hasil yang diinginkan.

Logika pencariannya kira-kira seperti ini: telusuri setiap kalimat dan temukan kata-kata dari pesan masuk yang ada dalam kalimat ini.

Jika kata itu ditemukan, maka +1 ditambahkan sebagai "bobot variabel."

Oleh karena itu, semakin banyak kata yang ditemukan dalam kalimat, semakin besar β€œbobot variabel”.

Ini menunjukkan bahwa jika kata "moralitas dan kehidupan" ditemukan dalam beberapa kalimat dari database, maka ini adalah jawaban 100% yang akan dikeluarkan.

Tetapi jika kata-katanya ada di topik dan menghasilkan banyak 100% dari hasilnya, maka metode acak () dikeluarkan oleh metode rand ().

Selain itu, kalimat-kalimat ini tidak selalu kecil, jadi saya harus memotong jawabannya, kira-kira oleh pelanggan tetap seperti itu:

  preg_match('/(?:^|\.\s+)([^\.]*?'.$wordpattern.'[^\.]*?\.+)\s+/i', $text , $matches); 

Maka semuanya otomatis:
mengirim pesan

 $request_params = array( 'message' => $matches[1], #'message' => $find[0], 'peer_id' => $user_id, 'access_token' => $token, 'v' => '5.80' ); $get_params = http_build_query($request_params); file_get_contents('https://api.vk.com/method/messages.send?'. $get_params); header("HTTP/1.1 200 OK"); echo('ok'); 

Saya secara khusus tidak mengunggah semua kode, tetapi ini relatif kecil. Tujuannya adalah untuk menciptakan mesin tanggapan atas permintaan, alih-alih intelijen yang terlatih secara artifisial.

Anda dapat menguji bot di tautan ini . Cukup tulis pesan padanya. Penting untuk mengetahui bahwa pada awal kalimat Anda perlu meletakkan "Nietzsche", seolah-olah merujuk padanya, baru bot akan merespons.

Ini adalah versi uji, dan karena itu tidak lengkap, oleh karena itu, tikar, gaul pemuda, kesalahan dalam kata-kata, dll. - bot tidak memperhitungkan dan basisnya hanya 10.000 frase.

Sebagai contoh, saya bisa memberikan dialog:

gambar

gambar

gambar

gambar

gambar

gambar

Kesimpulan: Ya, bot tidak memiliki komunikasi dua arah dengan pengguna - itu bukan kecerdasan buatan. Tetapi dalam percakapan dari sejumlah besar peserta, bot akan menjadi "teman bicara" yang baik.

Source: https://habr.com/ru/post/id477184/


All Articles