From 2414fbc19f567aea4be237dd059505529b933264 Mon Sep 17 00:00:00 2001 From: LBenzahia Date: Fri, 13 Oct 2017 14:35:29 +0100 Subject: [PATCH] add arabic stopwords list / fix issue ArabicStemmer AttributeError #1852 --- nltk/stem/snowball.py | 7 +- nltk/stem/util.py | 251 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 255 insertions(+), 3 deletions(-) diff --git a/nltk/stem/snowball.py b/nltk/stem/snowball.py index 00b511c183..102748f863 100644 --- a/nltk/stem/snowball.py +++ b/nltk/stem/snowball.py @@ -31,7 +31,7 @@ from nltk import compat from nltk.corpus import stopwords from nltk.stem import porter -from nltk.stem.util import suffix_replace, prefix_replace +from nltk.stem.util import suffix_replace, prefix_replace, arabic_stopwords from nltk.stem.api import StemmerI @@ -516,7 +516,7 @@ def __Suffix_Verb_Step1(self, token): def __Suffix_Verb_Step2a(self, token): for suffix in self.__suffix_verb_step2a: - if token.endswith(suffix): + if token.endswith(suffix) and len(token) > 3: if suffix == '\u062a' and len(token) >= 4: token = token[:-1] self.suffix_verb_step2a_success = True @@ -744,6 +744,9 @@ def stem(self, word): self.prefix_step3a_noun_success = False self.prefix_step3b_noun_success = False + # Avoid stopwords + if word in arabic_stopwords: + return word modified_word = word # guess type and properties # checks1 diff --git a/nltk/stem/util.py b/nltk/stem/util.py index 2ba8547b74..87fe255b25 100644 --- a/nltk/stem/util.py +++ b/nltk/stem/util.py @@ -19,4 +19,253 @@ def prefix_replace(original, old, new): :param new: string :return: string """ - return new + original[len(old):] \ No newline at end of file + return new + original[len(old):] + +arabic_stopwords = ['إذ', + 'إذا', + 'إذما', + 'إذن', + 'أف', + 'أقل', + 'أكثر', + 'ألا', + 'إلا', + 'التي', + 'الذي', + 'الذين', + 'اللاتي', + 'اللائي', + 'اللتان', + 'اللتيا', + 'اللتين', + 'اللذان', + 'اللذين', + 'اللواتي', + 'إلى', + 'إليك', + 'إليكم', + 'إليكما', + 'إليكن', + 'أم', + 'أما', + 'إما', + 'أن', + 'إن', + 'إنا', + 'أنا', + 'أنت', + 'أنتم', + 'أنتما', + 'أنتن', + 'إنما', + 'إنه', + 'أنى', + 'أنى', + 'آه', + 'آها', + 'أو', + 'أولاء', + 'أولئك', + 'أوه', + 'آي', + 'أي', + 'أيها', + 'إي', + 'أين', + 'أين', + 'أينما', + 'إيه', + 'بخ', + 'بس', + 'بعد', + 'بعض', + 'بك', + 'بكم', + 'بكم', + 'بكما', + 'بكن', + 'بل', + 'بلى', + 'بما', + 'بماذا', + 'بمن', + 'بنا', + 'به', + 'بها', + 'بهم', + 'بهما', + 'بهن', + 'بي', + 'بين', + 'بيد', # though + 'تلك', + 'تلكم', + 'تلكما', + 'ته', + 'تي', + 'تين', + 'تينك', + 'ثم', + 'ثمة', + 'حاشا', + 'حبذا', + 'حتى', + 'حيث', + 'حيثما', + 'حين', + 'خلا', + 'دون', + 'ذا', + 'ذات', + 'ذاك', + 'ذان', + 'ذانك', + 'ذلك', + 'ذلكم', + 'ذلكما', + 'ذلكن', + 'ذه', + 'ذو', + 'ذوا', + 'ذواتا', + 'ذواتي', + 'ذي', + 'ذين', + 'ذينك', + 'ريث', + 'سوف', + 'سوى', # except + 'شتان', + 'عدا', + 'عسى', + 'عل', + 'على', + 'عليك', + 'عليه', + 'عما', + 'عن', + 'عند', + 'غير', # except + 'فإذا', + 'فإن', + 'فلا', + 'فمن', + 'في', + 'فيم', + 'فيما', + 'فيه', + 'فيها', + 'قبل', + 'قد', + 'كأن', + 'كأنما', + 'كأي', + 'كأين', + 'كذا', + 'كذلك', + 'كل', + 'كلا', + 'كلاهما', + 'كلتا', + 'كلما', + 'كليكما', + 'كليهما', + 'كم', + 'كما', + 'كي', + 'كيت', + 'كيف', + 'كيفما', + 'لا', + 'لاسيما', + 'لدى', + 'لست', + 'لستم', + 'لستما', + 'لستن', + 'لسن', + 'لسنا', + 'لعل', + 'لك', + 'لكم', + 'لكما', + 'لكن', + 'لكنما', + 'لكي', + 'لكيلا', + 'لم', + 'لما', + 'لن', + 'لنا', + 'له', + 'لها', + 'لهم', + 'لهما', + 'لهن', + 'لو', + 'لولا', + 'لوما', + 'لي', + 'لئن', + 'ليت', + 'ليس', + 'ليسا', + 'ليست', + 'ليستا', + 'ليسوا', + 'ما', + 'ماذا', + 'متى', # when + 'مذ', + 'مع', + 'مما', + 'ممن', + 'من', + 'منه', + 'منها', + 'منذ', + 'مه', + 'مهما', + 'نحن', + 'نحو', + 'نعم', + 'ها', + 'هاتان', + 'هاته', + 'هاتي', + 'هاتين', + 'هاك', + 'هاهنا', + 'هذا', + 'هذان', + 'هذه', + 'هذي', + 'هذين', + 'هكذا', + 'هل', + 'هلا', + 'هم', + 'هما', + 'هن', + 'هنا', + 'هناك', + 'هنالك', + 'هو', + 'هؤلاء', + 'هي', + 'هيا', + 'هيت', + 'هيهات', + 'والذي', + 'والذين', + 'وإذ', + 'وإذا', + 'وإن', + 'ولا', + 'ولكن', + 'ولو', + 'وما', + 'ومن', + 'وهو', + 'يا' + ] \ No newline at end of file