GNU/Linux >> Belajar Linux >  >> Linux

Frekuensi Kata Dalam Teks Bahasa Non-Inggris:Bagaimana Saya Dapat Menggabungkan Bentuk Singular Dan Plural Dll.?

Saya menyortir Prancis kata bahasa dalam beberapa file teks menurut frekuensi dengan fokus pada wawasan daripada signifikansi statistik. Tantangannya adalah tentang mempertahankan karakter beraksen dan menangani bentuk artikel di depan vokal(l' , d' ) dalam konteks membentuk token kata untuk penyortiran.

Topik kata-kata yang paling sering muncul dalam sebuah file memiliki banyak bentuk( 1 | 2 | 3 | 4). Jadi saya menggabungkan fungsi ini menggunakan GNU utilitas:

compt1 () {
for i in *.txt; do
    echo "File: $i"
    sed -e 's/ /
/g' <"$i" | sed -e 's/^[[:alpha:]][[:punct:]](.*)/1/' | sed -e 's/(.*)/L1/' | grep -hEo "[[:alnum:]_'-]+" | grep -Fvwf /path_to_stop_words_file | sort | uniq -c | sort -rn 
done
}

…yang memperdagangkan ruang untuk baris baru; memangkas karakter diikuti dengan tanda baca yang ada di awal baris; kemudian mengubah semuanya menjadi huruf kecil; menggunakan grep yang ringkas ini konstruksi yang cocok dengan karakter penyusun kata untuk membuat token; lalu hilangkan stopword, dan terakhir ada sortir biasa. File stop berisi segmen dengan karakter individual sehingga Anda harus berhati-hati dengan cara penggunaannya, tetapi analisis yang diberikan tentang cara membuat kata dasar untuk kata dalam bahasa yang berbeda sangat menarik!

Sekarang ketika saya membandingkan frekuensi kata yang signifikan dengan output grep -c langsung pada file, saya pikir itu cukup dekat dalam beberapa margin kesalahan.

Pertanyaan :

  • Bagaimana saya bisa memodifikasi ini untuk menggabungkan frekuensi jamak dengan
    bentuk tunggalnya yaitu kata-kata yang berbagi awalan umum dengan akhiran karakter 1
    yang bervariasi?
  • Saya mencoba menilai apakah grep bagian khususnya akan bekerja dengan apa yang ada di OSX ?

Jawaban yang Diterima:

Anda benar-benar tidak akan dapat melakukan ini dengan sed . yang sederhana naskah. Saya berasumsi bahwa Anda ingin mengurangi menjadi "formulir kutipan", menciutkan semua infleksi menjadi bentuk dasar.

Itu berarti kata sifat seperti protégé, protégés, protégée, protégées semua dihitung sebagai hal yang sama, kata sifat dasar/participle anak didik . Demikian pula, semua infleksi dari kata kerja pelindung — seperti anak didik, anak didik, anak didik, anak didik, anak didik, anak didik, anak didik, anak didik , dll. — semuanya akan direduksi menjadi kata kerja dasar itu.

Itu berarti Anda perlu mengetahui hal-hal tentang morfologi infleksional bahasa. Lebih buruk lagi, Anda perlu memahami sesuatu tentang sintaksis bahasa yang sebenarnya, termasuk untuk infleksi dan untuk membedakan homograf.

Saya telah melakukan sangat pendekatan sederhana untuk setidaknya bagian pertama ini menggunakan Perl. Ini benar-benar agak sakit di pantat. Berikut adalah contoh kode yang saya gunakan untuk membuat kunci pengurutan untuk kota besar dan kecil di semenanjung Iberia:

       # 1st strip leading articles
          s/^L'//;    # Catalan
          s{ ^
            (?:
        # Castilian
                El
              | Los
              | La
              | Las

        # Catalan 
              | Els
              | Les         
              | Sa
              | Es

        # Gallego
              | O       
              | Os
              | A
              | As      
            ) 
            s+ 
          }{}x;
        # 2nd strip interior particles
          s/b[dl]'//g;   # Catalan
          s{ 
            b
            (?:
                el  | los | la | las | de  | del | y          # ES
              | els | les | i  | sa | es | dels               # CA 
              | o   | os  | a  | as  | do  | da | dos | das   # GAL
            )
            b
        }{}gx;

Itu menghapus artikel dan partikel sehingga tidak dihitung untuk tujuan penyortiran. Tetapi Anda harus berurusan dengan formulir seperti l'autre dengan apa yang disebut tanda kutip keriting, yang sebenarnya adalah U+2019 TANDA KUTIPAN TUNGGAL KANAN, bentuk yang lebih disukai untuk apostrof. Saya menormalkannya menjadi yang lurus dengan s/’/'/g pertama.

Terkait:Perbedaan antara Shell Login dan Shell Non-Login?

Oh, dan Anda harus berurusan dengan pengkodean:MacRoman tidak sama dengan UTF-8 atau ISO-8859-1 — tidak lama lagi.

Sejujurnya, Anda mungkin ingin menggunakan sesuatu seperti algoritma stemming Snowball, yang menetapkan bahasa Prancis sebagai bahasanya. Tentu saja Lingua::Stem::Snowball Per Perl modul tahu bagaimana melakukan ini. Anda dapat mencari modul Perl yang berkaitan dengan linguistik Prancis menggunakan kueri ini.

Tetapi stemming hanya akan membawa Anda sejauh ini. Anda tidak akan benar-benar melakukan pekerjaan dengan baik sampai Anda menerapkan analisis morfosintaksis — yang berarti Anda harus membuat penguraian untuk kalimat dan menetapkan bagian ucapan untuk setiap elemen di sana.

Ini membutuhkan lebih banyak pekerjaan. Kabar baiknya adalah bahwa ada alat khusus untuk ini di luar sana, beberapa di antaranya memang berfungsi dalam bahasa Prancis. Tapi ini benar-benar menggigit, karena sekarang Anda telah berkelana ke bidang Pemrosesan Bahasa Alami dan Linguistik Komputasi. Tidak ada rumah yang bagus untuk pertanyaan seperti itu di sini, tetapi mungkin lebih baik dijawab di Linguistics.SE; Saya tidak tahu.


Linux
  1. Cara menyalin dan menempel di Putty

  2. Bagaimana Teknologi Cloud Dapat Memberdayakan eLearning dan Pembelajaran Jarak Jauh?

  3. Bagaimana saya bisa mendapatkan kata-kata di antara dua contoh teks/pola pertama?

  1. Bagaimana saya bisa mengurutkan berdasarkan pemilik dan grup?

  2. Bagaimana saya bisa membenarkan teks biasa di Linux?

  3. Bagaimana \n dan \r ditangani secara berbeda di Linux dan Windows?

  1. Bagaimana saya bisa mengembalikan chmod pada direktori dll?

  2. Bagaimana saya bisa meraster semua teks dalam PDF?

  3. Mengapa crontab saya tidak berfungsi, dan bagaimana cara mengatasinya?