Saya memiliki file teks. Saya perlu mendapatkan daftar kalimat.
Bagaimana ini bisa diterapkan? Ada banyak kehalusan, seperti titik yang digunakan dalam singkatan.
Ekspresi reguler saya yang lama bekerja dengan buruk:
re.compile('(\. |^|!|\?)([A-Z][^;↑\.<>@\^&/\[\]]*(\.|!|\?) )',re.M)
Jawaban:
Perangkat Bahasa Alami ( nltk.org ) memiliki apa yang Anda butuhkan. Posting grup ini menunjukkan bahwa:
(Saya belum mencobanya!)
sumber
nltk .tokenize.punkt.PunktSentenceTokenizer
.nltk.download()
terlebih dahulu dan mengunduh model ->punkt
'This fails on cases with ending quotation marks. If we have a sentence that ends like "this." This is another sentence.'
dan keluaran saya['This fails on cases with ending quotation marks.', 'If we have a sentence that ends like "this."', 'This is another sentence.']
Sepertinya benar untuk saya.Fungsi ini dapat membagi seluruh teks Huckleberry Finn menjadi beberapa kalimat dalam waktu sekitar 0,1 detik dan menangani banyak kasus tepi yang lebih menyakitkan yang membuat penguraian kalimat menjadi tidak sepele, misalnya " Tuan John Johnson Jr. lahir di AS tetapi memperoleh gelar Ph. D. di Israel sebelum bergabung dengan Nike Inc. sebagai insinyur. Dia juga bekerja di craigslist.org sebagai analis bisnis. "
sumber
prefixes = "(Mr|St|Mrs|Ms|Dr|Prof|Capt|Cpt|Lt|Mt)[.]"
,websites = "[.](com|net|org|io|gov|me|edu)"
, danif "..." in text: text = text.replace("...","<prd><prd><prd>")
Alih-alih menggunakan regex untuk memisahkan teks menjadi kalimat, Anda juga dapat menggunakan pustaka nltk.
ref: https://stackoverflow.com/a/9474645/2877052
sumber
for sentence in tokenize.sent_tokenize(text): print(sentence)
Anda dapat mencoba menggunakan Spacy, bukan regex. Saya menggunakannya dan itu berhasil.
sumber
Berikut adalah pendekatan jalan tengah yang tidak bergantung pada perpustakaan eksternal. Saya menggunakan pemahaman daftar untuk mengecualikan tumpang tindih antara singkatan dan terminator serta untuk mengecualikan tumpang tindih antara variasi penghentian, misalnya: '.' vs. '. "'
Saya menggunakan fungsi find_all Karl dari entri ini: Temukan semua kemunculan substring dengan Python
sumber
...
dan?!
.Untuk kasus sederhana (di mana kalimat diakhiri secara normal), ini seharusnya berfungsi:
Regex adalah
*\. +
, yang mencocokkan titik yang dikelilingi oleh 0 atau lebih spasi di kiri dan 1 atau lebih di kanan (untuk mencegah sesuatu seperti titik di re.split dihitung sebagai perubahan dalam kalimat).Jelas, bukan solusi yang paling kuat, tetapi itu akan baik-baik saja dalam banyak kasus. Satu-satunya kasus yang tidak tercakup adalah singkatan (mungkin dijalankan melalui daftar kalimat dan periksa apakah setiap string
sentences
diawali dengan huruf kapital?)sumber
SyntaxError: EOL while scanning string literal
menunjuk ke tanda kurung tutup (setelahtext
). Selain itu, regex yang Anda rujuk dalam teks Anda tidak ada dalam contoh kode Anda.r' *[\.\?!][\'"\)\]]* +'
Anda juga dapat menggunakan fungsi tokenisasi kalimat di NLTK:
sumber
@Bayu_joo
Hai! Anda dapat membuat tokenizer baru untuk bahasa Rusia (dan beberapa bahasa lainnya) menggunakan fungsi ini:
dan kemudian menyebutnya dengan cara ini:
Semoga beruntung, Marilena.
sumber
Tidak diragukan lagi bahwa NLTK adalah yang paling cocok untuk tujuan tersebut. Tetapi memulai dengan NLTK cukup menyakitkan (Tapi begitu Anda menginstalnya - Anda langsung menuai hasilnya)
Jadi, inilah kode berbasis ulang sederhana yang tersedia di http://pythonicprose.blogspot.com/2009/09/python-split-paragraph-into-sentences.html
sumber
Saya harus membaca file subtitle dan membaginya menjadi beberapa kalimat. Setelah pra-pemrosesan (seperti menghapus informasi waktu dll dalam file .srt), variabel fullFile berisi teks lengkap dari file subtitle. Cara kasar di bawah ini dengan rapi membaginya menjadi beberapa kalimat. Mungkin saya beruntung bahwa kalimat selalu diakhiri (dengan benar) dengan spasi. Coba ini dulu dan jika ada pengecualian, tambahkan lebih banyak check and balances.
Oh! baik. Sekarang saya menyadari bahwa karena konten saya adalah bahasa Spanyol, saya tidak memiliki masalah berurusan dengan "Mr. Smith" dll. Namun, jika seseorang menginginkan pengurai yang cepat dan kotor ...
sumber
Saya harap ini akan membantu Anda dalam bahasa latin, cina, teks arab
sumber
keluaran:
Sumber: https://www.geeksforgeeks.org/nlp-how-tokenizing-text-sentence-words-works/
sumber