Solr adalah server aplikasi pencarian tingkat perusahaan independen yang menyediakan antarmuka API seperti layanan web. Pengguna dapat mengirimkan file XML dari format tertentu ke server mesin pencari melalui permintaan HTTP dan menghasilkan indeks; Mereka juga dapat mengirimkan permintaan pencarian melalui operasi HTTP Get dan mendapatkan hasil pengembalian dalam format XML/JSON. Dikembangkan menggunakan Java5, berdasarkan Lucene.
Lucene adalah subproyek dari tim proyek 4 Jakarta dari Yayasan Perangkat Lunak Apache. Ini adalah alat mesin pencari teks lengkap open source, yaitu, ini bukan mesin pencari teks lengkap lengkap, tetapi arsitektur mesin pencari teks lengkap, menyediakan mesin kueri dan mesin indeks lengkap, dan mesin analisis teks parsial (bahasa Inggris dan bahasa Barat Jerman).
Di antara mereka, prinsip-prinsip dasar pencarian teks lengkap Lucene konsisten dengan teknologi dalam kursus pencarian web yang diajarkan oleh Guo Jundaniu. Ini menggunakan segmentasi kata, analisis tata bahasa semantik, model ruang vektor dan teknologi lainnya untuk mencapainya. Berikut ini adalah posting blog yang lebih rinci: http://www.cnblogs.com/guochunguang/articles/3641008.html
1. Diskusi Umum
Definisi Menurut http://lucene.apache.org/java/docs/index.html:
Lucene adalah perpustakaan pencarian teks lengkap berbasis Java yang efisien.
Jadi sebelum Anda memahami Lucene, Anda harus meluangkan waktu untuk belajar tentang pencarian teks lengkap.
Jadi apa itu pencarian teks lengkap? Ini dimulai dengan data dalam hidup kita.
Data dalam kehidupan kita umumnya dibagi menjadi dua jenis: data terstruktur dan data yang tidak terstruktur.
• Data terstruktur: Mengacu pada data dengan format tetap atau panjang terbatas, seperti database, metadata, dll.
• Data yang tidak terstruktur: Mengacu pada data dengan panjang yang tidak pasti atau tanpa format tetap, seperti email, dokumen kata, dll.
Tentu saja, beberapa tempat juga akan menyebutkan tipe ketiga, data semi-terstruktur, seperti XML, HTML, dll., Ketika dapat diproses sesuai dengan data terstruktur, atau teks biasa dapat diekstraksi untuk diproses sebagai data yang tidak terstruktur.
Data yang tidak terstruktur juga disebut data teks lengkap.
Menurut klasifikasi data, pencarian juga dibagi menjadi dua jenis:
• Cari data terstruktur: Misalnya, mencari database, gunakan pernyataan SQL. Misalnya, mencari metadata, seperti menggunakan pencarian Windows untuk mencari nama file, jenis, waktu modifikasi, dll.
• Cari data yang tidak terstruktur: Misalnya, mencari Windows juga dapat mencari konten file, perintah GREP di bawah Linux, dan misalnya, menggunakan Google dan Baidu dapat mencari sejumlah besar data konten.
Ada dua metode utama untuk mencari data yang tidak terstruktur, yaitu, data teks lengkap:
Salah satunya adalah pemindaian serial: yang disebut pemindaian berurutan, misalnya, mencari file dengan string tertentu, adalah untuk melihat setiap dokumen sekaligus. Untuk setiap dokumen, lihat dari awal hingga akhir. Jika dokumen ini berisi string ini, maka dokumen ini adalah file yang kami cari, dan kemudian lihat file berikutnya sampai semua file dipindai. Jika Anda menggunakan Windows untuk mencari, Anda juga dapat mencari konten file, tetapi cukup lambat. Jika Anda memiliki hard drive 80G, jika Anda ingin menemukan file dengan string tertentu di atasnya, itu takut Anda tidak akan dapat melakukannya tanpa menghabiskan beberapa jam. Ini juga cara yang sama untuk perintah GREP di bawah Linux. Anda mungkin berpikir metode ini relatif primitif, tetapi untuk file dengan volume data kecil, metode ini masih yang paling langsung dan nyaman. Tetapi untuk sejumlah besar file, metode ini sangat lambat.
Beberapa orang mungkin mengatakan bahwa pemindaian berurutan dari data yang tidak terstruktur sangat lambat, tetapi mencari data terstruktur relatif cepat (karena data terstruktur memiliki struktur tertentu, algoritma pencarian tertentu dapat digunakan untuk mempercepat kecepatan), jadi bukankah cukup untuk menemukan cara untuk membuat data kami yang tidak terstruktur memiliki struktur tertentu?
Gagasan ini alami, tetapi membentuk ide dasar pencarian teks lengkap, yaitu untuk mengekstraksi bagian dari informasi dalam data yang tidak terstruktur dan mengatur ulang untuk membuatnya memiliki struktur tertentu, dan kemudian mencari data dengan struktur tertentu, sehingga dapat mencapai tujuan pencarian dengan relatif cepat.
Bagian informasi yang diekstraksi dari data yang tidak terstruktur ini dan kemudian direorganisasi disebut indeks.
Pernyataan ini relatif abstrak, dan mudah dipahami dengan memberikan beberapa contoh. Misalnya, kamus, tabel pinyin dan tabel karakter cek radikal dari kamus setara dengan indeks kamus. Penjelasan masing -masing karakter tidak terstruktur. Jika kamus tidak memiliki tabel tabel suku kata dan tabel karakter cek radikal, Anda hanya dapat memindai di lautan kata -kata yang luas. Namun, beberapa informasi kata dapat diekstraksi untuk pemrosesan terstruktur. Misalnya, pengucapan relatif terstruktur, dibagi menjadi inisial dan final, dan hanya ada beberapa jenis yang dapat terdaftar satu per satu. Oleh karena itu, pengucapan diambil dan diatur dalam urutan tertentu, dan setiap pengucapan menunjuk ke jumlah halaman dari penjelasan terperinci dari kata ini. Ketika kami mencari, kami mencari pengucapan sesuai dengan pinyin terstruktur, dan kemudian kami dapat menemukan data kami yang tidak terstruktur - yaitu, penjelasan kata -kata tersebut.
Proses pertama membuat indeks dan kemudian mencari indeks disebut pencarian teks lengkap.
Gambar di bawah ini berasal dari "Lucene In Action", tetapi tidak hanya menggambarkan proses pencarian Lucene, tetapi juga menjelaskan proses umum pencarian teks lengkap.
Pencarian teks lengkap umumnya dibagi menjadi dua proses: pembuatan indeks (pengindeksan) dan indeks pencarian (pencarian).
• Pembuatan Indeks: Proses mengekstraksi informasi dari semua data terstruktur dan tidak terstruktur di dunia nyata dan membuat indeks.
• Indeks Pencarian: Ini adalah proses mendapatkan permintaan kueri pengguna, mencari indeks yang dibuat, dan kemudian mengembalikan hasilnya.
Oleh karena itu, ada tiga masalah penting dalam pencarian teks lengkap:
1. Apa sebenarnya yang ada dalam indeks? (Indeks)
2. Bagaimana cara membuat indeks? (Pengindeksan)
3. Bagaimana cara mencari indeks? (Mencari)
Di bawah ini kami mempelajari setiap masalah secara berurutan.
2. Apa yang sebenarnya ada dalam indeks
Apa yang sebenarnya perlu disimpan dalam indeks?
Pertama, mari kita lihat mengapa kecepatan pemindaian berurutan lambat:
Bahkan, itu disebabkan oleh ketidakkonsistenan antara informasi yang ingin kami cari dan informasi yang disimpan dalam data yang tidak terstruktur.
Informasi yang disimpan dalam data yang tidak terstruktur adalah apa yang dikandung setiap file, yaitu, file yang diketahui, dan relatif mudah untuk mencari string, yaitu pemetaan dari file ke string. Informasi yang ingin kami cari adalah file mana yang berisi string ini, yaitu string yang diketahui, dan file yang diinginkan, yaitu, pemetaan dari string ke file. Keduanya justru sebaliknya. Oleh karena itu, jika indeks selalu dapat menyimpan pemetaan dari string ke file, kecepatan pencarian akan sangat ditingkatkan.
Karena pemetaan dari string ke file adalah proses terbalik dari file ke pemetaan string, indeks yang menyimpan informasi tersebut disebut indeks terbalik .
Informasi yang disimpan dari indeks terbalik umumnya sebagai berikut:
Misalkan ada 100 dokumen dalam koleksi dokumen saya. Demi kenyamanan, kami memberi nomor dokumen dari 1 hingga 100 dan mendapatkan struktur berikut.
Di sebelah kiri adalah serangkaian string yang disebut kamus .
Setiap string menunjuk ke daftar tertaut dokumen yang berisi string ini, yang disebut daftar posting .
Dengan pengindeksan, informasi yang disimpan konsisten dengan informasi yang akan dicari, yang dapat mempercepat pencarian.
Misalnya, jika kita ingin menemukan dokumen yang berisi string "Lucene" dan string "Solr", kita hanya membutuhkan langkah -langkah berikut:
1. Hapus daftar tautan dokumen yang berisi string "Lucene".
2. Hapus daftar tautan dokumen yang berisi string "solr".
3. Dengan menggabungkan daftar tertaut, temukan file yang berisi "Lucene" dan "Solr".
Melihat tempat ini, beberapa orang mungkin mengatakan bahwa pencarian teks lengkap memang mempercepat pencarian, tetapi dengan proses pengindeksan tambahan, keduanya mungkin tidak jauh lebih cepat daripada pemindaian berurutan. Memang, dengan proses pengindeksan, pengambilan teks lengkap tidak selalu lebih cepat daripada pemindaian berurutan, terutama ketika volume data kecil. Membuat indeks pada sejumlah besar data juga merupakan proses yang sangat lambat.
Namun, masih ada perbedaan antara keduanya. Pemindaian berurutan adalah pemindaian setiap kali, dan proses membuat indeks hanya perlu sekali dan untuk semua. Setiap pencarian, proses membuat indeks tidak harus melalui, hanya mencari indeks yang dibuat.
Ini juga merupakan salah satu keuntungan pencarian teks lengkap dibandingkan pemindaian berurutan: pengindeksan sekali, menggunakan beberapa kali.
3. Cara membuat indeks
Proses pembuatan indeks pencarian teks lengkap umumnya memiliki langkah-langkah berikut:
Langkah 1: Beberapa dokumen asli yang akan diindeks (dokumen).
Untuk memfasilitasi penjelasan proses pembuatan indeks, di sini kami menggunakan dua file sebagai contoh:
File Satu: Siswa harus diizinkan pergi keluar dengan teman -teman mereka, tetapi tidak diizinkan minum bir.
File 2: Teman saya Jerry pergi ke sekolah untuk melihat murid -muridnya tetapi menemukan mereka mabuk yang tidak diizinkan.
Langkah 2: Lewati dokumen asli ke tokenizer.
Kata komponen participle (tokenizer) akan melakukan hal -hal berikut (proses ini disebut tokenize):
1. Bagilah dokumen menjadi kata -kata terpisah.
2. Hapus tanda baca.
3. Hapus kata berhenti.
Kata berhenti yang disebut adalah beberapa kata yang paling umum dalam suatu bahasa. Karena tidak memiliki arti khusus, itu tidak bisa menjadi kata kunci pencarian dalam banyak kasus. Oleh karena itu, saat membuat indeks, kata ini akan dihapus dan ukuran indeks akan dikurangi.
Bahasa Inggris berhenti kata seperti: "The", "a", "this", dll.
Untuk tokenizer setiap bahasa, ada satu set kata berhenti.
Hasil yang diperoleh setelah kata participle (tokenizer) disebut elemen kata.
Dalam contoh kami, kami mendapatkan elemen kata berikut (token):
"Siswa", "diizinkan", "go", "mereka", "teman", "diizinkan", "minum", "bir", "my", "friend", "jerry", "go", "School", "See", "his", "siswa", "ditemukan", "mereka", "mabuk", "diizinkan".
Langkah 3: Lewati token yang diperoleh ke komponen pemrosesan bahasa (prosesor linguistik).
Komponen pemrosesan bahasa (prosesor linguistik) terutama berkaitan dengan elemen kata (token) yang dihasilkan.
Untuk bahasa Inggris, komponen pemrosesan bahasa (prosesor linguistik) umumnya melakukan hal berikut:
1. Ubah ke huruf kecil (huruf kecil).
2. Kurangi kata menjadi bentuk akar, seperti "mobil" menjadi "mobil", dll. Operasi ini disebut: Stemming.
3. Konversi kata menjadi bentuk akar, seperti "mengemudi" ke "drive", dll. Operasi ini disebut lemmatisasi.
Persamaan dan perbedaan antara batang dan lemmatisasi:
• Simetris: Stemming dan Lemmatisasi keduanya membuat kosakata bentuk root.
• Kedua metode ini berbeda:
◦Stemming mengadopsi metode "reduksi": "mobil" ke "mobil", "mengemudi" ke "mengemudi".
◦Lemmatisasi mengadopsi metode "transformasi": "mengemudi" untuk "mengemudi", "mengemudi" ke "mengemudi".
• Algoritma keduanya berbeda:
◦ Mendapatkan terutama mengadopsi beberapa algoritma tetap untuk melakukan pengurangan ini, seperti menghilangkan "S", menghilangkan "ing" dan menambahkan "e", mengubah "ational" menjadi "makan", dan mengubah "nasional" menjadi "tion".
◦Lemmatisasi terutama menggunakan metode menyimpan kamus tertentu untuk membuat transformasi ini. Misalnya, ada pemetaan dari "mengemudi" ke "mengemudi", "mengemudi" ke "drive", "am, is, adalah" untuk "menjadi" di kamus. Saat membuat transformasi, lihat saja kamus.
• Stemming dan lemmatisasi bukanlah hubungan yang saling eksklusif, tetapi memiliki persimpangan. Beberapa kata dapat mencapai konversi yang sama menggunakan kedua metode.
Hasil dari prosesor linguistik disebut istilah.
Dalam contoh kami, setelah pemrosesan bahasa, kata (istilah) yang diperoleh adalah sebagai berikut:
"Mahasiswa", "izinkan", "go", "mereka", "teman", "ijinkan", "minum", "bir", "my", "friend", "jerry", "go", "sekolah", "lihat", "miliknya", "siswa", "temukan", "mereka", "minuman", "ijinkan".
Justru karena langkah -langkah pemrosesan bahasa yang pencarian drive dapat dicari, dan drive juga dapat dicari.
Langkah 4: Lewati kata (istilah) yang diperoleh ke komponen indeks (pengindeks).
Indexer terutama melakukan hal berikut:
1. Buat kamus menggunakan kata yang dihasilkan (istilah).
Dalam contoh kami kamus adalah sebagai berikut:
Ketentuan | ID dokumen |
Murid | 1 |
mengizinkan | 1 |
pergi | 1 |
Milik mereka | 1 |
teman | 1 |
mengizinkan | 1 |
Minum | 1 |
bir | 1 |
-ku | 2 |
teman | 2 |
Jerry | 2 |
pergi | 2 |
sekolah | 2 |
melihat | 2 |
miliknya | 2 |
Murid | 2 |
Menemukan | 2 |
Mereka | 2 |
Minum | 2 |
mengizinkan | 2 |
2. Urutkan kamus abjad.
Ketentuan | ID dokumen |
mengizinkan | 1 |
mengizinkan | 1 |
mengizinkan | 2 |
bir | 1 |
Minum | 1 |
Minum | 2 |
Menemukan | 2 |
teman | 1 |
teman | 2 |
pergi | 1 |
pergi | 2 |
miliknya | 2 |
Jerry | 2 |
-ku | 2 |
sekolah | 2 |
melihat | 2 |
Murid | 1 |
Murid | 2 |
Milik mereka | 1 |
Mereka | 2 |
• Frekuensi dokumen berarti frekuensi dokumen, menunjukkan berapa banyak file yang berisi kata ini (istilah).
• Frekuensi berarti frekuensi kata, yang berarti bahwa file ini berisi beberapa kata (istilah).
Oleh karena itu, untuk kata "izinkan", ada dua dokumen yang berisi kata ini (istilah), jadi ada dua dokumen yang mengikuti daftar dokumen setelah kata (istilah). Item pertama mewakili dokumen pertama yang berisi "Izinkan", yaitu, dokumen 1. Dalam dokumen ini, "Izinkan" muncul dua kali, dan item kedua mewakili dokumen kedua yang berisi "Izinkan" adalah dokumen 2. Dalam dokumen ini, "Izinkan" muncul sekali.
Sejauh ini, indeks telah dibuat, dan kami dapat dengan cepat menemukan dokumen yang kami inginkan.
Dan dalam prosesnya, kami terkejut menemukan bahwa mencari "drive", "mengemudi", "mengemudi", dan "driven" juga dapat ditemukan. Karena dalam indeks kami, "mengemudi", "mengemudi", dan "didorong" semua akan diproses melalui bahasa dan menjadi "drive". Saat mencari, jika Anda memasukkan "mengemudi", pernyataan kueri yang dimasukkan juga akan melewati satu hingga tiga langkah di sini, dan kemudian menjadi "drive" kueri, sehingga Anda dapat mencari dokumen yang diinginkan.
3. Bagaimana cara mencari indeks?
Tampaknya kami dapat mengumumkan "kami telah menemukan dokumentasi yang kami inginkan".
Namun, masalahnya belum berakhir, dan ditemukan bahwa itu hanya satu aspek dari pencarian teks lengkap. Bukan? Jika hanya satu atau sepuluh dokumen yang berisi string yang kami minta, kami menemukannya. Tetapi bagaimana jika ada seribu, atau bahkan ribuan? Mana yang paling Anda inginkan?
Buka Google, misalnya, jika Anda ingin mencari pekerjaan di Microsoft, Anda memasukkan "Microsoft Job" dan Anda menemukan total 2.2600.000 hasil yang dikembalikan. Sungguh jumlah yang besar, itu adalah masalah yang tiba -tiba saya menemukan bahwa itu tidak ditemukan, dan terlalu banyak juga masalah. Dengan begitu banyak hasil, bagaimana Anda mengutamakan hasil yang paling relevan?
Tentu saja Google melakukan pekerjaan dengan baik, Anda akan menemukan pekerjaan di Microsoft dalam sekali jalan. Bayangkan betapa mengerikannya jika beberapa orang pertama adalah "Microsoft melakukan pekerjaan dengan baik di industri perangkat lunak ..."
Bagaimana menemukan pernyataan kueri yang paling relevan di antara ribuan hasil pencarian seperti Google?
Bagaimana cara menentukan korelasi antara dokumen yang dicari dan pernyataan kueri?
Ini kembali ke pertanyaan ketiga kami: Bagaimana cara mencari indeks?
Pencarian terutama dibagi menjadi langkah -langkah berikut:
Langkah 1: Pengguna memasukkan pernyataan kueri.
Pernyataan kueri memiliki sintaks tertentu, seperti bahasa biasa kita.
Pernyataan kueri yang berbeda memiliki sintaks yang berbeda, seperti pernyataan SQL memiliki sintaks tertentu.
Sintaks dari pernyataan kueri bervariasi sesuai dengan implementasi sistem pengambilan teks lengkap. Yang paling dasar meliputi: dan, atau, tidak, dll.
Misalnya, pernyataan input pengguna: Lucene dan belajar tidak hadoop.
Jelaskan bahwa pengguna ingin menemukan dokumen yang berisi Lucene dan dipelajari tetapi tidak termasuk Hadoop.
Langkah 2: Lakukan analisis leksikal, analisis tata bahasa, dan pemrosesan bahasa dari pernyataan kueri.
Karena pernyataan kueri memiliki sintaks, juga perlu untuk melakukan analisis tata bahasa, analisis tata bahasa dan pemrosesan bahasa.
1. Analisis leksikal terutama digunakan untuk mengidentifikasi kata dan kata kunci.
Seperti dalam contoh di atas, setelah analisis leksikal, kata -kata termasuk Lucene, Learning, Hadoop, dan kata kunci termasuk dan, tidak.
Jika kata kunci ilegal ditemukan dalam analisis leksikal, kesalahan akan terjadi. Misalnya, Lucene AMD belajar, di mana AMD terlibat dalam permintaan sebagai kata biasa karena salah mengeja dan.
2. Analisis sintaks terutama membentuk pohon sintaks berdasarkan aturan tata bahasa dari pernyataan kueri.
Jika Anda menemukan bahwa pernyataan kueri tidak memenuhi aturan sintaks, kesalahan akan dilaporkan. Jika Lucene tidak dan belajar, kesalahan akan terjadi.
Seperti dalam contoh di atas, pohon sintaks yang dibentuk oleh Lucene dan belajar tidak ada sebagai berikut:
3. Pemrosesan bahasa hampir sama dengan pemrosesan bahasa selama pengindeksan.
Misalnya, belajar menjadi terpelajar, dll.
Setelah langkah kedua, kami mendapatkan pohon sintaks yang diproses bahasa.
Langkah 3: Cari indeks dan dapatkan dokumen yang cocok dengan pohon sintaksis.
Langkah ini dibagi menjadi beberapa langkah kecil:
1. Pertama, di tabel indeks terbalik, temukan daftar tautan dokumen yang berisi Lucene, Learn, dan Hadoop.
2. Kedua, gabungkan daftar tertaut yang berisi Lucene dan pelajari untuk mendapatkan daftar daftar yang tertaut yang berisi Lucene dan Learn.
3. Lalu, lakukan perbedaan antara daftar tertaut ini dan daftar Dokumen yang ditautkan dari Hadoop, dan hapus dokumen yang berisi Hadoop, sehingga dapat mendapatkan daftar tertaut dokumen yang berisi Lucene dan Learn dan tidak berisi Hadoop.
4. Daftar tautan dokumen ini adalah dokumen yang kami cari.
Langkah 4: Urutkan hasil berdasarkan korelasi antara dokumen yang diperoleh dan pernyataan kueri.
Meskipun pada langkah sebelumnya, kami mendapatkan dokumen yang diinginkan, hasil kueri harus diurutkan berdasarkan korelasi mereka dengan pernyataan kueri, dan semakin relevan yang terjadi, semakin tinggi yang.
Bagaimana cara menghitung korelasi antara dokumen dan pernyataan kueri?
Lebih baik menganggap pernyataan kueri sebagai dokumen singkat dan mencetak relevansi antara dokumen. Jika korelasi dengan skor tinggi baik, itu harus peringkat terlebih dahulu.
Jadi bagaimana Anda menilai hubungan antar dokumen?
Ini bukan tugas yang mudah. Pertama, mari kita lihat menilai hubungan antara orang -orang.
Pertama -tama, ketika melihat seseorang, seringkali ada banyak elemen , seperti kepribadian, kepercayaan, hobi, pakaian, tinggi, kegemukan, dan ketipisan.
Kedua , untuk hubungan antara orang -orang, elemen yang berbeda memiliki kepentingan yang berbeda . Karakter, kepercayaan, dan hobi mungkin lebih penting. Pakaian, tinggi, dan kegemukan mungkin tidak terlalu penting. Oleh karena itu, orang dengan kepribadian, kepercayaan, dan hobi yang sama atau serupa lebih cenderung menjadi teman baik, tetapi orang dengan pakaian, tinggi, dan kegemukan yang berbeda, dan ketipisan juga bisa menjadi teman baik.
Oleh karena itu, ketika menilai hubungan antara orang -orang, pertama -tama kita harus mencari tahu elemen mana yang paling penting bagi hubungan antara orang -orang , seperti kepribadian, kepercayaan, dan hobi. Kedua, kita perlu menilai hubungan antara unsur -unsur dua orang ini , seperti satu orang memiliki kepribadian yang ceria, orang lain memiliki kepribadian ekstrovert, satu percaya pada agama Buddha, yang lain percaya pada Tuhan, satu suka bermain basket, dan yang lain suka bermain sepak bola. Kami menemukan bahwa keduanya sangat positif dalam hal kepribadian, baik dalam hal iman, dan olahraga dalam hal hobi, sehingga hubungan di antara mereka harus sangat baik.
Mari kita lihat hubungan antara perusahaan.
Pertama, lihatlah sebuah perusahaan, yang terdiri dari banyak orang, seperti manajer umum, manajer, kepala pejabat teknis, karyawan biasa, penjaga keamanan, penjaga pintu, dll.
Kedua, orang yang berbeda memiliki kepentingan yang berbeda untuk hubungan antara perusahaan . Manajer umum, manajer, dan Kepala Pejabat Teknis mungkin lebih penting, dan karyawan biasa, penjaga keamanan, dan penjaga pintu mungkin kurang penting. Jadi jika hubungan antara manajer umum, manajer dan kepala pejabat teknologi dua perusahaan relatif baik, kedua perusahaan rentan memiliki hubungan yang lebih baik. Namun, bahkan jika seorang karyawan biasa memiliki kebencian yang mendalam dengan karyawan biasa dari perusahaan lain, tidak mungkin itu akan mempengaruhi hubungan antara kedua perusahaan.
Oleh karena itu, untuk menilai hubungan antara perusahaan, pertama -tama kita harus mencari tahu siapa yang paling penting bagi hubungan antara perusahaan , seperti manajer umum, manajer, dan chief technology officer. Kedua, kita perlu menilai hubungan antara orang -orang ini , yang tidak sebagus manajer umum dari kedua perusahaan, manajer adalah sesama penduduk desa, dan kepala petugas teknologi dulunya mitra wirausaha. Kami menemukan bahwa hubungan antara kedua perusahaan itu baik, apakah manajer umum, manajer, atau chief technology officer, itu baik, sehingga hubungan antara kedua perusahaan harus baik.
Setelah menganalisis kedua hubungan, mari kita lihat bagaimana menilai hubungan antar dokumen .
Pertama-tama, sebuah dokumen terdiri dari banyak kata (istilah) , seperti pencarian, lucene, teks lengkap, ini, a, apa, dll.
Kedua, istilah yang berbeda memiliki kepentingan yang berbeda untuk hubungan antara dokumen . Misalnya, untuk dokumen ini, pencarian, lucene, teks lengkap relatif penting, ini, a, apa yang mungkin relatif tidak penting. Jadi jika kedua dokumen berisi pencarian, Lucene, dan fullText, korelasi antara kedua dokumen ini lebih baik. Namun, bahkan jika satu dokumen berisi ini, a, apa, dan dokumen lainnya tidak mengandung ini, a, apa, itu tidak dapat mempengaruhi korelasi antara kedua dokumen.
Oleh karena itu, untuk menilai hubungan antar dokumen, pertama -tama cari tahu kata (istilah) mana yang paling penting untuk hubungan antara dokumen, seperti pencarian, lucene, fulltext. Kemudian menilai hubungan antara kata -kata ini (istilah).
Proses mengetahui pentingnya kata (istilah) terhadap dokumen disebut proses menghitung bobot kata.
Ada dua parameter untuk menghitung istilah berat. Yang pertama adalah kata (istilah) dan yang kedua adalah dokumen (dokumen).
Berat kata menunjukkan pentingnya kata ini dalam dokumen ini. Semakin penting kata (istilah) memiliki semakin besar bobot (berat badan), dan oleh karena itu akan memainkan peran yang lebih besar dalam menghitung korelasi antara dokumen.
Proses menilai hubungan antara kata -kata (istilah) dan dengan demikian mendapatkan korelasi dokumen digunakan untuk menggunakan algoritma model ruang vektor (model ruang vektor).
Mari kita analisis dua proses ini dengan cermat:
1. Proses menghitung berat (berat badan).
Ada dua faktor utama yang mempengaruhi pentingnya kata (istilah) dalam dokumen:
• Term Frekuensi (TF): Itu adalah berapa kali istilah ini muncul dalam dokumen ini. Semakin besar TF, semakin penting artinya.
• Dokumen Frekuensi (DF): Artinya, berapa banyak dokumen yang berisi istilah sekunder. Semakin besar DF, semakin sedikit artinya.
Apakah mudah dimengerti? Semakin banyak kata (istilah) muncul dalam dokumen, semakin penting untuk dokumen. Misalnya, kata "pencarian" muncul berkali -kali dalam dokumen ini, yang berarti bahwa dokumen ini terutama berbicara tentang aspek ini. Namun, dalam dokumen bahasa Inggris, jika ini muncul lebih sering, apakah itu berarti lebih penting? Tidak, ini disesuaikan dengan faktor kedua. Faktor kedua menunjukkan bahwa semakin banyak dokumen berisi kata ini (istilah), itu berarti bahwa kata (istilah) terlalu biasa dan tidak cukup untuk membedakan dokumen -dokumen ini, jadi semakin tidak penting.
Ini juga teknologi yang kami pelajari. Untuk programmer sendiri, semakin dalam mereka menguasai teknologi ini, semakin baik (semakin dalam yang mereka kuasai berarti semakin banyak waktu yang mereka habiskan, semakin besar TF), dan semakin kompetitif mereka ketika mencari pekerjaan. Namun, untuk semua programmer, semakin sedikit orang yang memahami teknologi ini, semakin baik (semakin sedikit orang yang memahaminya), dan semakin kompetitif mereka dalam mencari pekerjaan. Inilah alasan mengapa nilai manusia terletak pada ketidakjelasan.
Setelah kebenaran dipahami, mari kita lihat formula:
Ini hanyalah implementasi khas sederhana dari rumus perhitungan bobot istilah. Orang yang menerapkan sistem pengambilan teks lengkap akan memiliki implementasi sendiri, dan Lucene sedikit berbeda dari ini.
2. Proses menilai hubungan antara istilah dan mendapatkan korelasi dokumen, yaitu, algoritma (VSM) model ruang vektor.
Kami menganggap dokumen sebagai serangkaian kata (istilah), setiap kata (istilah) memiliki bobot (berat badan), dan kata -kata yang berbeda (istilah) mempengaruhi perhitungan penilaian relevansi dokumen berdasarkan bobot mereka sendiri dalam dokumen.
Jadi kami menganggap bobot istilah dalam dokumen ini sebagai vektor.
Dokumen = {term1, term2,…, istilah n}
Vektor dokumen = {bobot1, bobot2, ..., berat n}
Demikian pula, kami menganggap pernyataan kueri sebagai dokumen sederhana dan juga mengekspresikannya dalam vektor.
Query = {term1, istilah 2,…, istilah n}
Query vector = {bobot1, bobot2, ..., berat n}
Kami menempatkan semua vektor dokumen yang dicari dan vektor kueri ke dalam ruang n-dimensi, dan setiap kata (istilah) adalah satu dimensi.
Seperti yang ditunjukkan pada gambar:
Kami percaya bahwa semakin kecil sudut antara dua vektor, semakin besar korelasi.
Oleh karena itu, kami menghitung nilai kosinus dari sudut yang disertakan sebagai skor korelasi. Semakin kecil sudut, semakin besar nilai kosinus, semakin tinggi skor, dan semakin besar korelasi.
Beberapa orang mungkin bertanya bahwa pernyataan kueri umumnya sangat singkat dan mengandung sangat sedikit kata (istilah), sehingga dimensi vektor kueri sangat kecil, sedangkan dokumennya sangat panjang, berisi banyak kata (istilah), dan dimensi vektor dokumen sangat besar. Mengapa dimensi keduanya dalam grafik Anda n?
Di sini, karena Anda ingin meletakkannya di ruang vektor yang sama, dimensi alami adalah sama. Berbeda pada saat yang sama, ambil persatuan keduanya. Jika tidak ada kata (istilah), berat (berat badan) adalah 0.
Formula penilaian korelasi adalah sebagai berikut:
Misalnya, ada 11 istilah dalam pernyataan kueri, dan tiga dokumen dicari. Bobot masing -masing (berat badan) adalah sebagai berikut.
t1 | T2 | T3 | T4 | T5 | t6 | T7 | T8 | t9 | T10 | T11 | |
D1 | 0 | 0 | .477 | 0 | .477 | .176 | 0 | 0 | 0 | .176 | 0 |
D2 | 0 | .176 | 0 | .477 | 0 | 0 | 0 | 0 | .954 | 0 | .176 |
D3 | 0 | .176 | 0 | 0 | 0 | .176 | 0 | 0 | 0 | .176 | .176 |
Q | 0 | 0 | 0 | 0 | 0 | .176 | 0 | 0 | .477 | 0 | .176 |
Oleh karena itu, skor korelasi antara tiga dokumen dan pernyataan kueri dihitung sebagai:
Oleh karena itu, Dokumen 2 memiliki korelasi tertinggi, pengembalian pertama, diikuti oleh Dokumen 1, dan akhirnya dokumen 3.
Sejauh ini, kami dapat menemukan dokumentasi yang paling kami inginkan.
Setelah banyak mengatakan, saya belum memasuki Lucene, tetapi itu hanya teori dasar dalam pengambilan informasi. Namun, setelah kita melihat Lucene, kita akan menemukan bahwa Lucene adalah praktik dasar dari teori dasar ini. Oleh karena itu, dalam artikel yang menganalisis Lucene, kita akan sering melihat penerapan teori di atas di Lucene.
Sebelum memasuki Lucene, ringkasan proses pembuatan indeks dan pencarian di atas adalah seperti yang ditunjukkan pada gambar:
Angka ini mengacu pada artikel "Lucene, mesin pencari teks lengkap dari kode sumber terbuka" di http://www.lucene.com.cn/about.htm
1. Proses Pengindeksan:
1) Ada serangkaian file yang diindeks
2) File yang diindeks dianalisis secara sintaksis dan pemrosesan bahasa untuk membentuk serangkaian kata (istilah).
3) Buat Tabel Indeks Kamus dan Terbalik melalui Pengindeksan.
4) Tulis indeks ke hard disk melalui penyimpanan indeks.
2. Proses Pencarian:
a) Pernyataan kueri input pengguna.
b) Serangkaian kata (istilah) diperoleh melalui analisis tata bahasa dan analisis bahasa dari pernyataan kueri.
c) Dapatkan pohon kueri melalui analisis sintaksis.
d) Baca indeks ke dalam memori melalui penyimpanan indeks.
e) Gunakan pohon kueri untuk mencari indeks, untuk mendapatkan daftar tautan dokumen untuk setiap kata (istilah), mengirimkan daftar tautan dokumen, dan dapatkan dokumen hasilnya.
f) Urutkan dokumen hasil yang dicari dengan relevansi kueri.
g) Mengembalikan hasil kueri kepada pengguna.
2. Urutkan kamus abjad.
Ketentuan | ID dokumen |
mengizinkan | 1 |
mengizinkan | 1 |
mengizinkan | 2 |
bir | 1 |
Minum | 1 |
Minum | 2 |
Menemukan | 2 |
teman | 1 |
teman | 2 |
pergi | 1 |
pergi | 2 |
miliknya | 2 |
Jerry | 2 |
-ku | 2 |
sekolah | 2 |
melihat | 2 |
Murid | 1 |
Murid | 2 |
Milik mereka | 1 |
Mereka | 2 |
3. Gabungkan kata -kata yang sama (istilah) ke dalam daftar tautan reverse (daftar posting) dokumen.
Di tabel ini, ada beberapa definisi: