Saya secara teratur menggunakan tesaurus, baik saat menulis salinan untuk dokumentasi dan README, dan saat menulis kode untuk memberi nama variabel dan fungsi.
Saya dulu menggunakan tesauri online, terutama tesaurus.com, tapi saya benci pengalaman itu. Meskipun hasilnya bermanfaat dan terorganisir dengan baik, namun tidak ramah keyboard dan lambat dalam navigasi, terutama bila hasilnya menjangkau banyak halaman.
Jadi saya membuat tesaurus sendiri. Saya menggunakannya jauh lebih sering daripada menggunakan tesaurus.com. Fiturnya lebih sedikit, namun lebih cepat diakses dan tidak terlalu mengganggu proses kreatif.
Di jendela terminal, ketik th
diikuti dengan sebuah kata. Misalnya, untuk mencari kata perhatian :
Memanggil th untuk perhatian |
Outputnya adalah daftar kata dan frasa terkait, disusun dalam kolom, dengan garis konteks di atas dan di bawah, dan daftar opsi navigasi di bagian bawah.
Hasil pencarian untuk perhatian |
Baris terbawah tampilan hasil menunjukkan daftar tindakan yang tersedia. Memulai suatu tindakan dengan mengetikkan huruf pertama dari tindakan tersebut (disorot di layar untuk penekanan).
Data disusun sebagai entri tesaurus, masing-masing dengan kumpulan kata dan frasa terkait. Entri adalah batang dan kata serta frasa terkait adalah cabangnya .
Tampilan defaultnya adalah dalam mode cabang. Kata-kata yang ditampilkan adalah kata dan frasa yang tercantum setelah entri dalam tesaurus sumber. Beralih ke mode trunks akan menampilkan entri yang berisi kata tersebut. Hal ini paling jelas ditunjukkan oleh contoh tanpa cabang apa pun:
trigger adalah sebuah kata tanpa entri |
Tidak ada entri tesaurus untuk kata trigger . Namun, kata pemicu ada dalam tesaurus, sebagai cabang dari entri lainnya. Beralih ke mode trunks untuk melihat entri yang menyertakan trigger :
Daftar kata yang pemicunya merupakan kata terkait |
Program ini tidak tersedia sebagai paket; kode sumber harus diunduh dan proyek dibangun. Langkah-langkah berikut akan menghasilkan tesaurus yang berfungsi:
git clone https://www.github.com/cjungmann/th.git
cd th
make
make thesaurus.db
Mainkan program ini untuk melihat apakah Anda menyukainya. Jika Anda ingin menginstalnya agar tersedia di luar direktori build, jalankan perintah berikut:
sudo make install
Sangat mudah untuk menghapus program ini jika Anda memutuskan tidak memerlukan program tersebut.
Jika Anda sudah menginstal programnya, uninstall terlebih dahulu dengan sudo make uninstall
Ini akan menghapus program, file dukungan, dan direktori tempat file dukungan diinstal.
Jika program tidak diinstal, Anda dapat menghapus direktori kloning dengan aman.
Materi berikut ini terutama akan menarik minat pengembang, jika ada.
Proyek ini mudah dibuat, tetapi bergantung pada perangkat lunak lain. Berikut ini adalah daftar dependensi, yang hanya dependensi pertama (Database Berkeley) yang mungkin memerlukan intervensi. Item 3 dan 4 di bawah diunduh ke dalam subdirektori di bawah direktori build, dan kode yang ditemukan di sana ditautkan secara statis ke file yang dapat dieksekusi, sehingga tidak akan memengaruhi lingkungan Anda.
db versi 5 (Berkeley Database) diperlukan untuk database B-Tree dalam proyek. Jika Anda menggunakan git , Anda seharusnya sudah memilikinya, bahkan di FreeBSD yang hanya menyertakan versi db yang lebih lama. Make akan segera diakhiri dengan pesan jika tidak dapat menemukan db yang sesuai, dalam hal ini terserah Anda untuk menggunakan manajer paket Anda untuk menginstal db atau membangunnya dari sumber.
git digunakan untuk mengunduh beberapa dependensi. Meskipun dependensi proyek dapat langsung diunduh tanpa git , hal ini memerlukan pengetahuan tidak terdokumentasi tentang file sumber, masalah yang dihindari ketika make dapat menggunakan git untuk mengunduh dependensi.
readargs adalah salah satu proyek saya yang memproses argumen baris perintah. Meskipun proyek ini masih digunakan oleh th , perpustakaan ini tidak perlu lagi diinstal agar th dapat berfungsi. Makefile ke-th sekarang mengunduh proyek readargs ke dalam subdirektori, membangunnya dan menggunakan perpustakaan statis sebagai gantinya.
c_patterns adalah salah satu proyek saya, sebuah eksperimen dalam mengelola kode yang dapat digunakan kembali tanpa memerlukan perpustakaan. Makefile menggunakan git untuk mengunduh proyek, kemudian membuat tautan ke beberapa modul c_patterns di direktori src untuk disertakan dalam build ke-th .
Proyek ini, meskipun berguna (setidaknya bagi saya), juga merupakan sebuah eksperimen. Salah satu tujuan saya di sini adalah untuk meningkatkan keterampilan menulis makefile saya. Beberapa keputusan pembuatan dan pemasangan yang saya buat mungkin bukan praktik terbaik, atau bahkan mungkin tidak disukai oleh pengembang yang lebih berpengalaman. Jika Anda khawatir tentang apa yang akan terjadi pada sistem Anda jika Anda menginstal th
, saya harap hal berikut ini dapat membantu keputusan Anda.
Seperti yang diharapkan, make akan mengkompilasi aplikasi ke-th . Mungkin secara tidak biasa, make melakukan tugas-tugas lain yang mungkin memerlukan waktu:
Mengunduh repositori modul C saya dan menggunakan beberapa di antaranya dengan membuat tautan ke direktori src .
Daripada menggunakan configure
untuk memeriksa dependensi, makefile mengidentifikasi dan segera mengakhiri dengan pesan bermanfaat jika mendeteksi dependensi yang hilang.
Unduh dan impor tesaurus moby domain publik dari Proyek Gutenberg. Ini mengisi database kata aplikasi.
Ditinggalkan Unduh dan impor database jumlah kata. Idenya adalah untuk menawarkan urutan pengurutan alternatif untuk mempermudah menemukan kata dari daftar yang lebih panjang. Ini tidak berfungsi saat ini. Saya tidak yakin saya akan kembali lagi ke sini karena menurut saya manfaat membaca daftar abjad jauh lebih besar daripada manfaat meragukan dari mencoba mengutamakan kata-kata yang lebih umum digunakan. Alasannya adalah jauh lebih mudah untuk melacak kata-kata yang dipertimbangkan ketika kata-kata tersebut tidak tersebar secara acak dalam daftar kata yang panjang.
Saya baru menyadari bahwa ada sumber daftar Moby Part of Speech yang dapat membantu mengatur output. Ini menarik, tapi saya tidak yakin ini akan membantu, berdasarkan seberapa banyak bantuan penyortiran menurut abjad dalam menggunakan hasilnya. Kita lihat saja nanti.
Saya memiliki beberapa tujuan ketika memulai proyek ini.
Saya ingin lebih banyak pengalaman dengan Berkeley Database . Basis data penyimpanan kunci ini mendasari banyak aplikasi lain, termasuk git dan sqlite .
Saya ingin berlatih menggunakan beberapa modul proyek c_patterns saya. Menggunakan modul-modul ini dalam proyek nyata membantu saya memahami kelemahan desain dan fitur yang hilang. saya menggunakan
Columnize.c untuk menghasilkan keluaran kolom,
prompter.c untuk menu opsi minimal di bagian bawah output,
get_keypress.c untuk penekanan tombol yang tidak digaungkan, sebagian besar digunakan oleh prompter.c .
Saya ingin berlatih merancang proses pembangunan yang berfungsi baik di Gnu Linux dan BSD. Hal ini termasuk mengidentifikasi modul yang hilang (terutama db , yang mana BSD menyertakan perpustakaan yang terlalu tua), dan mendesain ulang pemrosesan bersyarat.
Saya tidak menargetkan Windows karena perbedaannya lebih signifikan antara Linux dibandingkan BSD, dan saya tidak berharap banyak pengguna Windows akan merasa nyaman beralih ke aplikasi baris perintah.
Berkeley Database ( bdb ) sepertinya merupakan produk database yang menarik. Pendekatan perpustakaan C tingkat rendahnya tampaknya mirip dengan mesin FairCom DB yang saya gunakan pada akhir tahun 1990an.
Database Berkeley menarik karena merupakan bagian dari distribusi Linux dan BSD dan memiliki ukuran yang kecil. Ini menghargai perencanaan data yang terperinci, dan ini merupakan alasan untuk mengeksplorasi beberapa ide bahasa C saya.
Proyek ini adalah permulaan ulang dari proyek kata-kata saya, yang dimaksudkan sebagai tesaurus dan kamus baris perintah. Proyek itu adalah penggunaan bdb pertama saya, jadi beberapa pekerjaan saya di sana agak canggung. Saya ingin mendesain kode bdb lagi dari awal. Saya akan menyalin beberapa kode penguraian teks dari proyek kata yang akan diterapkan di sini.
Dengan menggunakan kumpulan data besar yaitu tesaurus dan kamus, saya juga ingin menguji perbedaan kinerja antara metode akses data Queue dan Recno. Saya berharap Antrian akan lebih cepat dengan awal dan akhir catatan dengan panjang tetap dapat dihitung. Mengakses berdasarkan nomor rekaman dari rekaman dengan panjang variabel tertentu akan memerlukan pencarian lokasi file. Saya ingin mengukur perbedaan kinerja untuk mempertimbangkan keunggulan tersebut terhadap efisiensi penyimpanan data dengan panjang variabel.
Ada dua sumber tesauri domain publik:
Saya menggunakan tesaurus Moby karena pengorganisasiannya jauh lebih sederhana sehingga lebih mudah diurai. Masalahnya adalah sinonimnya sangat banyak dan, karena kurang terorganisir, lebih sulit untuk dipindai ketika mencari sinonim yang sesuai.
Dengan ratusan sinonim untuk banyak kata, sangat sulit untuk memindai daftar untuk menemukan kata yang tepat. Saya akan mencoba menerapkan beberapa urutan pada daftar agar lebih mudah digunakan. Setelah menggunakan alat ini selama beberapa waktu, saya menyimpulkan bahwa urutan abjad adalah yang terbaik. Jauh lebih mudah untuk kembali ke sebuah kata dalam daftar abjad. Saya telah menghapus opsi untuk memilih urutan kata lainnya.
Klasifikasi yang paling mudah digunakan adalah frekuensi penggunaan kata. Saya berencana untuk membuat daftar kata-kata dari yang frekuensi penggunaannya paling besar hingga yang paling sedikit. Agaknya, kata-kata yang lebih populer mungkin merupakan pilihan terbaik, sedangkan kata-kata yang kurang populer mungkin sudah ketinggalan zaman.
Ada beberapa sumber frekuensi kata. Yang saya gunakan didasarkan pada Google ngrams:
Data Corpus Bahasa Alami: Data Indah
Saya belum benar-benar mempelajari sumber Norvig, jadi mungkin ada banyak hal yang tidak masuk akal. Ada sumber lain yang mungkin memiliki daftar yang lebih bersih, hackerb9/gwordlist. Jika Norvig bermasalah, saya ingin mengingat daftar alternatif yang dapat saya gunakan untuk menggantinya.
Bagian ini tidak lagi dicoba. Menafsirkan data sumber menjadi rumit karena kebutuhan untuk mengenali dan mengubah notasi unik kamus menjadi karakter unicode. Saya telah memecahkan banyak masalah ini, namun masih banyak masalah yang tersisa. Makefile masih menyertakan instruksi untuk mengunduh informasi ini dan repositori menyimpan beberapa skrip konversi jika saya ingin kembali ke sini.
Mengelompokkan sinonim berdasarkan jenis kata (yaitu kata benda, kata kerja, kata sifat, dll.) juga berpotensi bermanfaat. Masalah pertama adalah mengidentifikasi bagian pidato yang diwakili oleh setiap kata. Masalah kedua adalah dalam presentasi: akan lebih baik, tetapi lebih sulit untuk memprogram, jika memiliki antarmuka yang membuat pengguna memilih jenis kata sebelum menampilkan kata-katanya.
Kamus elektronik, domain publik
Upaya pertama saya adalah menggunakan GNU Collaborative International Dictionary of English (GCIDE). Ini didasarkan pada Webster versi lama (1914), dengan beberapa kata ditambahkan oleh editor yang lebih modern.