Nltk: رمز الجملة لا ينقسم بشكل صحيح

تم إنشاؤها على ٢٣ نوفمبر ٢٠١٥  ·  5تعليقات  ·  مصدر: nltk/nltk

أعتقد أن هناك خطأ في رمز الجملة القياسي sent_tokenize . المشكلة هي أنه لا يتم تقسيم النص إلى جمل في حالة معينة. هذه هي الحالة ، حيث يفشل الرمز المميز في تقسيم النص إلى جملتين:

[sent for sent in nltk.sent_tokenize('Model wears size S. Fits size.')]

هذا يعيد ['Model wears size S. Fits size.'] ، بدلاً من ['Model wears size S.', 'Fits size.'] . يبدو أن المشكلة تظهر ، عندما تحتوي السلسلة الأخيرة قبل . على حرف واحد فقط. إذا كان عدد الأحرف هو >= 2 ، فإنه يقسم النص بشكل صحيح.

inactive tokenizer

التعليق الأكثر فائدة

أريد فقط إضافة مثال حقيقي من BookCorpus ، مستخرج من "Three Plays" ، نشره Mike Suttons في Smashwords.

sent_tokenize('The weather is terrible, and my day was ok. You are supposed to take your medicine.')

انتاج |

['The weather is terrible, and my day was ok. You are supposed to take your medicine.']

وأكد أن nltk لم يتعرف على k. كفاصل جملة.

ال 5 كومينتر

يبدو من الصعب جدًا إصلاح هذا في رمز الجملة إذا كنت تعتقد أن S. Fits قد يكون الاسم الأول والأخير لشخص ما.

أعتقد أن الطريقة التي يجب اتباعها هي إلى فئة فرعية أو نسخ ولصق رمز رمز جملة NLTK الافتراضي وتعديله ليناسب تطبيقك. على سبيل المثال ، إذا كنت لا تتوقع وجود مثل هذه الأسماء في النص ، فقم بإزالة القواعد التي تتعامل مع أسماء الأشخاص. خيار آخر هو استخدام حل بديل مثل استبدال size <X> بـ size_<X> قبل الترميز واستبدالها مرة أخرى بعد تقسيم النص إلى جمل.

أمم. فقط حاول مرة أخرى. لذا فإن الحالة الأولى التي قدمتها لم تنقسم بشكل صحيح. لكن إذا استخدمت شخصيات مختلفة ، فإنها تنقسم أحيانًا ! لهذا كتبت هذا الاختبار السريع:

import nltk
import pprint

pp = pprint.PrettyPrinter(indent=4)
s = 'Test {}. Test {}.'
[nltk.sent_tokenize(s.format(char, char)) for char in 'abcdefghijklmnopqrstuvwxyz']
[pp.pprint(nltk.sent_tokenize(s.format(char, char))) for char in 'abcdefghijklmnopqrstuvwxyz']

انتاج:

['Test a.', 'Test a.']
['Test b.', 'Test b.']
['Test c. Test c.']
['Test d. Test d.']
['Test e. Test e.']
['Test f. Test f.']
['Test g. Test g.']
['Test h. Test h.']
['Test i.', 'Test i.']
['Test j.', 'Test j.']
['Test k. Test k.']
['Test l. Test l.']
['Test m. Test m.']
['Test n. Test n.']
['Test o.', 'Test o.']
['Test p. Test p.']
['Test q.', 'Test q.']
['Test r. Test r.']
['Test s. Test s.']
['Test t. Test t.']
['Test u.', 'Test u.']
['Test v. Test v.']
['Test w. Test w.']
['Test x.', 'Test x.']
['Test y.', 'Test y.']
['Test z.', 'Test z.']

kmike ، كما ترى أنه غير متسق للغاية.

JernejJerin إنه ليس

الخوارزمية المستخدمة لتدريب sent_tokenizer هي خوارزمية Kiss and Strunk (2006) . إنه نظام إحصائي يحاول تعلم حدود الجملة لذا فهو ليس مثاليًا ولكنه يتوافق مع الاحتمالات الناتجة عن النموذج (ولكن ليس القواعد الشبيهة بالبشر الضرورية).

أريد فقط إضافة مثال حقيقي من BookCorpus ، مستخرج من "Three Plays" ، نشره Mike Suttons في Smashwords.

sent_tokenize('The weather is terrible, and my day was ok. You are supposed to take your medicine.')

انتاج |

['The weather is terrible, and my day was ok. You are supposed to take your medicine.']

وأكد أن nltk لم يتعرف على k. كفاصل جملة.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات