هذا الإخراج غير متوقع. يُرجع In
الحرف الكبير In
من مخرجات PorterStemmer.
>>> from nltk.stem import PorterStemmer
>>> porter = PorterStemmer()
>>> porter.stem('In')
'In'
مزيد من التفاصيل على https://stackoverflow.com/q/60387288/610569
لأي اشتقاق ، أليس من المفترض أولاً تحويلها إلى أحرف صغيرة كجزء من التطبيع؟
مثال آخر على الإنتاج المرسم باستخدام Oh
>>> from nltk.stem import PorterStemmer
>>> porter = PorterStemmer()
>>> porter.stem('Oh')
'Oh'
أعتقد أنه في الأصل يريد أن يظل الشكل الأصلي للاختصارات عندما يكون طول الكلمة أقل من 2 ، مثل اختصارات الدول.
def stem(self, word):
stem = word.lower()
if self.mode == self.NLTK_EXTENSIONS and word in self.pool:
return self.pool[word]
if self.mode != self.ORIGINAL_ALGORITHM and len(word) <= 2:
# With this line, strings of length 1 or 2 don't go through
# the stemming process, although no mention is made of this
# in the published algorithm.
return word
stem = self._step1a(stem)
stem = self._step1b(stem)
stem = self._step1c(stem)
stem = self._step2(stem)
stem = self._step3(stem)
stem = self._step4(stem)
stem = self._step5a(stem)
stem = self._step5b(stem)
return stem
الكلمتان "In" و "Oh" ليستا في self.pool
، و len(word)<=2
، مما يعني أنها لا تفي بشرط الجذع هنا ، لذلك تظل كما هي.
إذا لم يتم تعيينه ، فهل يمكنني العمل على ذلك؟ إنها المرة الأولى التي أساهم فيها في مشروع.
PhanatosZou لا تتردد في إجراء التغييرات وإنشاء طلب سحب. الكود الرئيسي الذي يجب تغييره هو:
if self.mode != self.ORIGINAL_ALGORITHM and len(word) <= 2:
# With this line, strings of length 1 or 2 don't go through
# the stemming process, although no mention is made of this
# in the published algorithm.
return stem
ولكن سيكون من الجيد التحقق من جميع المفاتيح في self.pool
وإذا لم تكن ذات أحرف كبيرة ، فقم بإجراء التغييرات على هذا أيضًا:
if self.mode == self.NLTK_EXTENSIONS and word in self.pool:
return self.pool[stem]
يبدو جيدا! سأعمل على ذلك.