Python NLTK - Membuat 'Kamus' dari Corpus dan Menyimpan Tag Nomor

Saya tidak terlalu berpengalaman dengan Python, tapi saya ingin melakukan analisis data dengan korpus, jadi saya melakukan bagian itu di NLTK Python.

Saya ingin menelusuri seluruh korpus dan membuat kamus yang berisi setiap kata yang muncul di kumpulan data korpus. Saya ingin dapat mencari sebuah kata di kamus ini dan menemukan berapa kali kata tersebut muncul sebagai bagian dari pidato (tag). Jadi, misalnya, jika saya mencari 'anjing', saya mungkin menemukan 100 tag kata benda dan 5 tag kata kerja, dll.

Tujuan akhirnya adalah menyimpan file ini secara eksternal sebagai .txt atau semacamnya dan memuatnya di program lain untuk memeriksa kemungkinan suatu kata menjadi tag..

Apakah saya akan melakukan ini dengan Counter dan ngrams?


person Nate Cook3    schedule 07.06.2015    source sumber


Jawaban (1)


Karena Anda hanya ingin POS kata-kata lepas, Anda tidak memerlukan ngram, Anda memerlukan korpus yang diberi tag. Dengan asumsi korpus Anda sudah diberi tag, Anda dapat melakukannya seperti ini.

>>> from nltk.corpus import brown
>>> wordcounts = nltk.ConditionalFreqDist(brown.tagged_words())
>>> wordcounts["set"].tabulate(10)
VBN   VB   NN  VBD VBN-HL NN-HL 
159   88   86   71    2    2 

ConditionalFreqDist pada dasarnya adalah kamus objek Counter, dengan beberapa tambahan. Cari di dokumen NLTK.

PS. Jika Anda ingin menormalisasi kata-kata Anda sebelum menghitung, gunakan

wordcounts = nltk.ConditionalFreqDist((w.lower(), t) for w, t in brown.tagged_words())
person alexis    schedule 07.06.2015
comment
Oke, sepertinya itu berhasil dengan sangat baik! Terima kasih! Bisakah saya menggunakan json untuk mencetak konten jumlah kata ke file teks? - person Nate Cook3; 07.06.2015
comment
json.dump(wordcounts, open(corpus_dict.txt,'w')) menghasilkan file teks yang tidak masuk akal. Saya berasumsi ini karena ini adalah kumpulan objek? - person Nate Cook3; 07.06.2015
comment
Saya tidak akan tahu. Saya akan sangat terkejut jika json tidak menangani kamus bersarang, dan hanya itu saja. - person alexis; 07.06.2015
comment
Oke, saya penasaran; Saya mencobanya dan kelihatannya sah. Coba dump = json.dumps(wordcounts), dan cetak dump[:100] - person alexis; 07.06.2015
comment
Menarik, saya dapat mencetak dump[:100] ke file txt dan memberikan beberapa {\fawn\: {\NN\: 1}, \Ranavan\... tetapi ketika saya mencetak seluruh dump sepertinya teks sedang ditulis di atas teks - person Nate Cook3; 08.06.2015
comment
Apakah Anda yakin keluarannya tidak valid? Sudahkah Anda mencoba memuat ulang? (Jika terlihat tidak valid, coba muat). - person alexis; 08.06.2015
comment
teks yang ditulis di atas teks bukanlah masalah yang mungkin terjadi saat menulis ke file. Secara default, json python tidak menambahkan baris baru atau lekukan, jadi Anda mungkin tidak perlu khawatir. - person alexis; 08.06.2015