diff --git a/src/Sastrawi/StopWordRemover/StopWordRemoverFactory.py b/src/Sastrawi/StopWordRemover/StopWordRemoverFactory.py index 560db07..821b81a 100644 --- a/src/Sastrawi/StopWordRemover/StopWordRemoverFactory.py +++ b/src/Sastrawi/StopWordRemover/StopWordRemoverFactory.py @@ -1,109 +1,168 @@ +import csv + from Sastrawi.Dictionary.ArrayDictionary import ArrayDictionary from Sastrawi.StopWordRemover.StopWordRemover import StopWordRemover + class StopWordRemoverFactory(object): - """description of class""" + """Factory for StopwordRemover""" + + __DEFAULT_STOP_WORDS = [ + 'a', 'ada', 'adalah', 'adanya', 'adapun', 'agak', 'agaknya', 'agar', 'akan', 'akankah', 'akhir', + 'akhiri', 'akhirnya', 'aku', 'akulah', 'amat', 'amatlah', 'anda', 'andalah', 'antar', 'antara', + 'antaranya', 'apa', 'apaan', 'apabila', 'apakah', 'apalagi', 'apatah', 'arti', 'artinya', 'asal', + 'asalkan', 'atas', 'atau', 'ataukah', 'ataupun', 'awal', 'awalnya', 'b', 'bagai', 'bagaikan', + 'bagaimana', 'bagaimanakah', 'bagaimanapun', 'bagainamakah', 'bagi', 'bagian', 'bahkan', 'bahwa', + 'bahwasannya', 'bahwasanya', 'baik', 'baiklah', 'bakal', 'bakalan', 'balik', 'banyak', 'bapak', + 'baru', 'bawah', 'beberapa', 'begini', 'beginian', 'beginikah', 'beginilah', 'begitu', 'begitukah', + 'begitulah', 'begitupun', 'bekerja', 'belakang', 'belakangan', 'belum', 'belumlah', 'benar', + 'benarkah', 'benarlah', 'berada', 'berakhir', 'berakhirlah', 'berakhirnya', 'berapa', 'berapakah', + 'berapalah', 'berapapun', 'berarti', 'berawal', 'berbagai', 'berdatangan', 'beri', 'berikan', + 'berikut', 'berikutnya', 'berjumlah', 'berkali-kali', 'berkata', 'berkehendak', 'berkeinginan', + 'berkenaan', 'berlainan', 'berlalu', 'berlangsung', 'berlebihan', 'bermacam', 'bermacam-macam', + 'bermaksud', 'bermula', 'bersama', 'bersama-sama', 'bersiap', 'bersiap-siap', 'bertanya', + 'bertanya-tanya', 'berturut', 'berturut-turut', 'bertutur', 'berujar', 'berupa', 'besar', + 'betul', 'betulkah', 'biasa', 'biasanya', 'bila', 'bilakah', 'bisa', 'bisakah', 'boleh', 'bolehkah', + 'bolehlah', 'buat', 'bukan', 'bukankah', 'bukanlah', 'bukannya', 'bulan', 'bung', 'c', 'cara', + 'caranya', 'cukup', 'cukupkah', 'cukuplah', 'cuma', 'd', 'dahulu', 'dalam', 'dan', 'dapat', 'dari', + 'daripada', 'datang', 'dekat', 'demi', 'demikian', 'demikianlah', 'dengan', 'depan', 'di', 'dia', + 'diakhiri', 'diakhirinya', 'dialah', 'diantara', 'diantaranya', 'diberi', 'diberikan', 'diberikannya', + 'dibuat', 'dibuatnya', 'didapat', 'didatangkan', 'digunakan', 'diibaratkan', 'diibaratkannya', + 'diingat', 'diingatkan', 'diinginkan', 'dijawab', 'dijelaskan', 'dijelaskannya', 'dikarenakan', + 'dikatakan', 'dikatakannya', 'dikerjakan', 'diketahui', 'diketahuinya', 'dikira', 'dilakukan', + 'dilalui', 'dilihat', 'dimaksud', 'dimaksudkan', 'dimaksudkannya', 'dimaksudnya', 'diminta', + 'dimintai', 'dimisalkan', 'dimulai', 'dimulailah', 'dimulainya', 'dimungkinkan', 'dini', 'dipastikan', + 'diperbuat', 'diperbuatnya', 'dipergunakan', 'diperkirakan', 'diperlihatkan', 'diperlukan', + 'diperlukannya', 'dipersoalkan', 'dipertanyakan', 'dipunyai', 'diri', 'dirinya', 'disampaikan', + 'disebut', 'disebutkan', 'disebutkannya', 'disini', 'disinilah', 'ditambahkan', 'ditandaskan', + 'ditanya', 'ditanyai', 'ditanyakan', 'ditegaskan', 'ditujukan', 'ditunjuk', 'ditunjuki', 'ditunjukkan', + 'ditunjukkannya', 'ditunjuknya', 'dituturkan', 'dituturkannya', 'diucapkan', 'diucapkannya', + 'diungkapkan', 'dong', 'dua', 'dulu', 'e', 'empat', 'enak', 'enggak', 'enggaknya', 'entah', 'entahlah', + 'f', 'g', 'guna', 'gunakan', 'h', 'hadap', 'hai', 'hal', 'halo', 'hallo', 'hampir', 'hanya', 'hanyalah', + 'hari', 'harus', 'haruslah', 'harusnya', 'helo', 'hello', 'hendak', 'hendaklah', 'hendaknya', 'hingga', + 'i', 'ia', 'ialah', 'ibarat', 'ibaratkan', 'ibaratnya', 'ibu', 'ikut', 'ingat', 'ingat-ingat', 'ingin', + 'inginkah', 'inginkan', 'ini', 'inikah', 'inilah', 'itu', 'itukah', 'itulah', 'j', 'jadi', 'jadilah', + 'jadinya', 'jangan', 'jangankan', 'janganlah', 'jauh', 'jawab', 'jawaban', 'jawabnya', 'jelas', + 'jelaskan', 'jelaslah', 'jelasnya', 'jika', 'jikalau', 'juga', 'jumlah', 'jumlahnya', 'justru', + 'k', 'kadar', 'kala', 'kalau', 'kalaulah', 'kalaupun', 'kali', 'kalian', 'kami', 'kamilah', 'kamu', + 'kamulah', 'kan', 'kapan', 'kapankah', 'kapanpun', 'karena', 'karenanya', 'kasus', 'kata', 'katakan', + 'katakanlah', 'katanya', 'ke', 'keadaan', 'kebetulan', 'kecil', 'kedua', 'keduanya', 'keinginan', + 'kelamaan', 'kelihatan', 'kelihatannya', 'kelima', 'keluar', 'kembali', 'kemudian', 'kemungkinan', + 'kemungkinannya', 'kena', 'kenapa', 'kepada', 'kepadanya', 'kerja', 'kesampaian', 'keseluruhan', + 'keseluruhannya', 'keterlaluan', 'ketika', 'khusus', 'khususnya', 'kini', 'kinilah', 'kira', + 'kira-kira', 'kiranya', 'kita', 'kitalah', 'kok', 'kurang', 'l', 'lagi', 'lagian', 'lah', 'lain', + 'lainnya', 'laku', 'lalu', 'lama', 'lamanya', 'langsung', 'lanjut', 'lanjutnya', 'lebih', 'lewat', + 'lihat', 'lima', 'luar', 'm', 'macam', 'maka', 'makanya', 'makin', 'maksud', 'malah', 'malahan', + 'mampu', 'mampukah', 'mana', 'manakala', 'manalagi', 'masa', 'masalah', 'masalahnya', 'masih', + 'masihkah', 'masing', 'masing-masing', 'masuk', 'mata', 'mau', 'maupun', 'melainkan', 'melakukan', + 'melalui', 'melihat', 'melihatnya', 'memang', 'memastikan', 'memberi', 'memberikan', 'membuat', + 'memerlukan', 'memihak', 'meminta', 'memintakan', 'memisalkan', 'memperbuat', 'mempergunakan', + 'memperkirakan', 'memperlihatkan', 'mempersiapkan', 'mempersoalkan', 'mempertanyakan', 'mempunyai', + 'memulai', 'memungkinkan', 'menaiki', 'menambahkan', 'menandaskan', 'menanti', 'menanti-nanti', + 'menantikan', 'menanya', 'menanyai', 'menanyakan', 'mendapat', 'mendapatkan', 'mendatang', 'mendatangi', + 'mendatangkan', 'menegaskan', 'mengakhiri', 'mengapa', 'mengatakan', 'mengatakannya', 'mengenai', + 'mengerjakan', 'mengetahui', 'menggunakan', 'menghendaki', 'mengibaratkan', 'mengibaratkannya', + 'mengingat', 'mengingatkan', 'menginginkan', 'mengira', 'mengucapkan', 'mengucapkannya', 'mengungkapkan', + 'menjadi', 'menjawab', 'menjelaskan', 'menuju', 'menunjuk', 'menunjuki', 'menunjukkan', 'menunjuknya', + 'menurut', 'menuturkan', 'menyampaikan', 'menyangkut', 'menyatakan', 'menyebutkan', 'menyeluruh', + 'menyiapkan', 'merasa', 'mereka', 'merekalah', 'merupakan', 'meski', 'meskipun', 'meyakini', 'meyakinkan', + 'minta', 'mirip', 'misal', 'misalkan', 'misalnya', 'mohon', 'mula', 'mulai', 'mulailah', 'mulanya', 'mungkin', + 'mungkinkah', 'n', 'nah', 'naik', 'namun', 'nanti', 'nantinya', 'nya', 'nyaris', 'nyata', 'nyatanya', + 'o', 'oleh', 'olehnya', 'orang', 'p', 'pada', 'padahal', 'padanya', 'pak', 'paling', 'panjang', 'pantas', + 'para', 'pasti', 'pastilah', 'penting', 'pentingnya', 'per', 'percuma', 'perlu', 'perlukah', 'perlunya', + 'pernah', 'persoalan', 'pertama', 'pertama-tama', 'pertanyaan', 'pertanyakan', 'pihak', 'pihaknya', + 'pukul', 'pula', 'pun', 'punya', 'q', 'r', 'rasa', 'rasanya', 'rupa', 'rupanya', 's', 'saat', 'saatnya', 'saja', + 'sajalah', 'salam', 'saling', 'sama', 'sama-sama', 'sambil', 'sampai', 'sampai-sampai', 'sampaikan', 'sana', + 'sangat', 'sangatlah', 'sangkut', 'satu', 'saya', 'sayalah', 'se', 'sebab', 'sebabnya', 'sebagai', + 'sebagaimana', 'sebagainya', 'sebagian', 'sebaik', 'sebaik-baiknya', 'sebaiknya', 'sebaliknya', + 'sebanyak', 'sebegini', 'sebegitu', 'sebelum', 'sebelumnya', 'sebenarnya', 'seberapa', 'sebesar', + 'sebetulnya', 'sebisanya', 'sebuah', 'sebut', 'sebutlah', 'sebutnya', 'secara', 'secukupnya', 'sedang', + 'sedangkan', 'sedemikian', 'sedikit', 'sedikitnya', 'seenaknya', 'segala', 'segalanya', 'segera', + 'seharusnya', 'sehingga', 'seingat', 'sejak', 'sejauh', 'sejenak', 'sejumlah', 'sekadar', 'sekadarnya', + 'sekali', 'sekali-kali', 'sekalian', 'sekaligus', 'sekalipun', 'sekarang', 'sekaranglah', 'sekecil', + 'seketika', 'sekiranya', 'sekitar', 'sekitarnya', 'sekurang-kurangnya', 'sekurangnya', 'sela', 'selain', + 'selaku', 'selalu', 'selama', 'selama-lamanya', 'selamanya', 'selanjutnya', 'seluruh', 'seluruhnya', + 'semacam', 'semakin', 'semampu', 'semampunya', 'semasa', 'semasih', 'semata', 'semata-mata', 'semaunya', + 'sementara', 'semisal', 'semisalnya', 'sempat', 'semua', 'semuanya', 'semula', 'sendiri', 'sendirian', + 'sendirinya', 'seolah', 'seolah-olah', 'seorang', 'sepanjang', 'sepantasnya', 'sepantasnyalah', + 'seperlunya', 'seperti', 'sepertinya', 'sepihak', 'sering', 'seringnya', 'serta', 'serupa', 'sesaat', + 'sesama', 'sesampai', 'sesegera', 'sesekali', 'seseorang', 'sesuatu', 'sesuatunya', 'sesudah', + 'sesudahnya', 'setelah', 'setempat', 'setengah', 'seterusnya', 'setiap', 'setiba', 'setibanya', + 'setidak-tidaknya', 'setidaknya', 'setinggi', 'seusai', 'sewaktu', 'siap', 'siapa', 'siapakah', + 'siapapun', 'sini', 'sinilah', 'soal', 'soalnya', 'suatu', 'sudah', 'sudahkah', 'sudahlah', 'supaya', + 't', 'tadi', 'tadinya', 'tahu', 'tak', 'tambah', 'tambahnya', 'tampak', 'tampaknya', 'tandas', 'tandasnya', + 'tanpa', 'tanya', 'tanyakan', 'tanyanya', 'tapi', 'tegas', 'tegasnya', 'telah', 'tempat', 'tentang', 'tentu', + 'tentulah', 'tentunya', 'tepat', 'terakhir', 'terasa', 'terbanyak', 'terdahulu', 'terdapat', 'terdiri', + 'terhadap', 'terhadapnya', 'teringat', 'teringat-ingat', 'terjadi', 'terjadilah', 'terjadinya', 'terkira', + 'terlalu', 'terlebih', 'terlihat', 'termasuk', 'ternyata', 'tersampaikan', 'tersebut', 'tersebutlah', + 'tertentu', 'tertuju', 'terus', 'terutama', 'tetap', 'tetapi', 'tiap', 'tiba', 'tiba-tiba', 'tidak', + 'tidakkah', 'tidaklah', 'tiga', 'toh', 'tuju', 'tunjuk', 'turut', 'tutur', 'tuturnya', 'u', 'ucap', 'ucapnya', + 'ujar', 'ujarnya', 'umumnya', 'ungkap', 'ungkapnya', 'untuk', 'usah', 'usai', 'v', 'w', 'waduh', 'wah', 'wahai', + 'waktunya', 'walau', 'walaupun', 'wong', 'x', 'y', 'ya', 'yaitu', 'yakin', 'yakni', 'yang', 'z' + ] + + def __init__(self): + self._stop_words = self.__DEFAULT_STOP_WORDS + + @property + def stopwords(self): + return self._stop_words + + @stopwords.setter + def stopwords(self, new_stopwords): + self._stop_words = new_stopwords def create_stop_word_remover(self): - stopWords = self.get_stop_words() - dictionary = ArrayDictionary(stopWords) - stopWordRemover = StopWordRemover(dictionary) + stop_words = self.get_stop_words() + dictionary = ArrayDictionary(stop_words) + stop_word_remover = StopWordRemover(dictionary) - return stopWordRemover + return stop_word_remover def get_stop_words(self): - return ['a','ada','adalah','adanya','adapun','agak','agaknya','agar','akan','akankah','akhir', - 'akhiri','akhirnya','aku','akulah','amat','amatlah','anda','andalah','antar','antara', - 'antaranya','apa','apaan','apabila','apakah','apalagi','apatah','arti','artinya','asal', - 'asalkan','atas','atau','ataukah','ataupun','awal','awalnya','b','bagai','bagaikan', - 'bagaimana','bagaimanakah','bagaimanapun','bagainamakah','bagi','bagian','bahkan','bahwa', - 'bahwasannya','bahwasanya','baik','baiklah','bakal','bakalan','balik','banyak','bapak', - 'baru','bawah','beberapa','begini','beginian','beginikah','beginilah','begitu','begitukah', - 'begitulah','begitupun','bekerja','belakang','belakangan','belum','belumlah','benar', - 'benarkah','benarlah','berada','berakhir','berakhirlah','berakhirnya','berapa','berapakah', - 'berapalah','berapapun','berarti','berawal','berbagai','berdatangan','beri','berikan', - 'berikut','berikutnya','berjumlah','berkali-kali','berkata','berkehendak','berkeinginan', - 'berkenaan','berlainan','berlalu','berlangsung','berlebihan','bermacam','bermacam-macam', - 'bermaksud','bermula','bersama','bersama-sama','bersiap','bersiap-siap','bertanya', - 'bertanya-tanya','berturut','berturut-turut','bertutur','berujar','berupa','besar', - 'betul','betulkah','biasa','biasanya','bila','bilakah','bisa','bisakah','boleh','bolehkah', - 'bolehlah','buat','bukan','bukankah','bukanlah','bukannya','bulan','bung','c','cara', - 'caranya','cukup','cukupkah','cukuplah','cuma','d','dahulu','dalam','dan','dapat','dari', - 'daripada','datang','dekat','demi','demikian','demikianlah','dengan','depan','di','dia', - 'diakhiri','diakhirinya','dialah','diantara','diantaranya','diberi','diberikan','diberikannya', - 'dibuat','dibuatnya','didapat','didatangkan','digunakan','diibaratkan','diibaratkannya', - 'diingat','diingatkan','diinginkan','dijawab','dijelaskan','dijelaskannya','dikarenakan', - 'dikatakan','dikatakannya','dikerjakan','diketahui','diketahuinya','dikira','dilakukan', - 'dilalui','dilihat','dimaksud','dimaksudkan','dimaksudkannya','dimaksudnya','diminta', - 'dimintai','dimisalkan','dimulai','dimulailah','dimulainya','dimungkinkan','dini','dipastikan', - 'diperbuat','diperbuatnya','dipergunakan','diperkirakan','diperlihatkan','diperlukan', - 'diperlukannya','dipersoalkan','dipertanyakan','dipunyai','diri','dirinya','disampaikan', - 'disebut','disebutkan','disebutkannya','disini','disinilah','ditambahkan','ditandaskan', - 'ditanya','ditanyai','ditanyakan','ditegaskan','ditujukan','ditunjuk','ditunjuki','ditunjukkan', - 'ditunjukkannya','ditunjuknya','dituturkan','dituturkannya','diucapkan','diucapkannya', - 'diungkapkan','dong','dua','dulu','e','empat','enak','enggak','enggaknya','entah','entahlah', - 'f','g','guna','gunakan','h','hadap','hai','hal','halo','hallo','hampir','hanya','hanyalah', - 'hari','harus','haruslah','harusnya','helo','hello','hendak','hendaklah','hendaknya','hingga', - 'i','ia','ialah','ibarat','ibaratkan','ibaratnya','ibu','ikut','ingat','ingat-ingat','ingin', - 'inginkah','inginkan','ini','inikah','inilah','itu','itukah','itulah','j','jadi','jadilah', - 'jadinya','jangan','jangankan','janganlah','jauh','jawab','jawaban','jawabnya','jelas', - 'jelaskan','jelaslah','jelasnya','jika','jikalau','juga','jumlah','jumlahnya','justru', - 'k','kadar','kala','kalau','kalaulah','kalaupun','kali','kalian','kami','kamilah','kamu', - 'kamulah','kan','kapan','kapankah','kapanpun','karena','karenanya','kasus','kata','katakan', - 'katakanlah','katanya','ke','keadaan','kebetulan','kecil','kedua','keduanya','keinginan', - 'kelamaan','kelihatan','kelihatannya','kelima','keluar','kembali','kemudian','kemungkinan', - 'kemungkinannya','kena','kenapa','kepada','kepadanya','kerja','kesampaian','keseluruhan', - 'keseluruhannya','keterlaluan','ketika','khusus','khususnya','kini','kinilah','kira', - 'kira-kira','kiranya','kita','kitalah','kok','kurang','l','lagi','lagian','lah','lain', - 'lainnya','laku','lalu','lama','lamanya','langsung','lanjut','lanjutnya','lebih','lewat', - 'lihat','lima','luar','m','macam','maka','makanya','makin','maksud','malah','malahan', - 'mampu','mampukah','mana','manakala','manalagi','masa','masalah','masalahnya','masih', - 'masihkah','masing','masing-masing','masuk','mata','mau','maupun','melainkan','melakukan', - 'melalui','melihat','melihatnya','memang','memastikan','memberi','memberikan','membuat', - 'memerlukan','memihak','meminta','memintakan','memisalkan','memperbuat','mempergunakan', - 'memperkirakan','memperlihatkan','mempersiapkan','mempersoalkan','mempertanyakan','mempunyai', - 'memulai','memungkinkan','menaiki','menambahkan','menandaskan','menanti','menanti-nanti', - 'menantikan','menanya','menanyai','menanyakan','mendapat','mendapatkan','mendatang','mendatangi', - 'mendatangkan','menegaskan','mengakhiri','mengapa','mengatakan','mengatakannya','mengenai', - 'mengerjakan','mengetahui','menggunakan','menghendaki','mengibaratkan','mengibaratkannya', - 'mengingat','mengingatkan','menginginkan','mengira','mengucapkan','mengucapkannya','mengungkapkan', - 'menjadi','menjawab','menjelaskan','menuju','menunjuk','menunjuki','menunjukkan','menunjuknya', - 'menurut','menuturkan','menyampaikan','menyangkut','menyatakan','menyebutkan','menyeluruh', - 'menyiapkan','merasa','mereka','merekalah','merupakan','meski','meskipun','meyakini','meyakinkan', - 'minta','mirip','misal','misalkan','misalnya','mohon','mula','mulai','mulailah','mulanya','mungkin', - 'mungkinkah','n','nah','naik','namun','nanti','nantinya','nya','nyaris','nyata','nyatanya', - 'o','oleh','olehnya','orang','p','pada','padahal','padanya','pak','paling','panjang','pantas', - 'para','pasti','pastilah','penting','pentingnya','per','percuma','perlu','perlukah','perlunya', - 'pernah','persoalan','pertama','pertama-tama','pertanyaan','pertanyakan','pihak','pihaknya', - 'pukul','pula','pun','punya','q','r','rasa','rasanya','rupa','rupanya','s','saat','saatnya','saja', - 'sajalah','salam','saling','sama','sama-sama','sambil','sampai','sampai-sampai','sampaikan','sana', - 'sangat','sangatlah','sangkut','satu','saya','sayalah','se','sebab','sebabnya','sebagai', - 'sebagaimana','sebagainya','sebagian','sebaik','sebaik-baiknya','sebaiknya','sebaliknya', - 'sebanyak','sebegini','sebegitu','sebelum','sebelumnya','sebenarnya','seberapa','sebesar', - 'sebetulnya','sebisanya','sebuah','sebut','sebutlah','sebutnya','secara','secukupnya','sedang', - 'sedangkan','sedemikian','sedikit','sedikitnya','seenaknya','segala','segalanya','segera', - 'seharusnya','sehingga','seingat','sejak','sejauh','sejenak','sejumlah','sekadar','sekadarnya', - 'sekali','sekali-kali','sekalian','sekaligus','sekalipun','sekarang','sekaranglah','sekecil', - 'seketika','sekiranya','sekitar','sekitarnya','sekurang-kurangnya','sekurangnya','sela','selain', - 'selaku','selalu','selama','selama-lamanya','selamanya','selanjutnya','seluruh','seluruhnya', - 'semacam','semakin','semampu','semampunya','semasa','semasih','semata','semata-mata','semaunya', - 'sementara','semisal','semisalnya','sempat','semua','semuanya','semula','sendiri','sendirian', - 'sendirinya','seolah','seolah-olah','seorang','sepanjang','sepantasnya','sepantasnyalah', - 'seperlunya','seperti','sepertinya','sepihak','sering','seringnya','serta','serupa','sesaat', - 'sesama','sesampai','sesegera','sesekali','seseorang','sesuatu','sesuatunya','sesudah', - 'sesudahnya','setelah','setempat','setengah','seterusnya','setiap','setiba','setibanya', - 'setidak-tidaknya','setidaknya','setinggi','seusai','sewaktu','siap','siapa','siapakah', - 'siapapun','sini','sinilah','soal','soalnya','suatu','sudah','sudahkah','sudahlah','supaya', - 't','tadi','tadinya','tahu','tak','tambah','tambahnya','tampak','tampaknya','tandas','tandasnya', - 'tanpa','tanya','tanyakan','tanyanya','tapi','tegas','tegasnya','telah','tempat','tentang','tentu', - 'tentulah','tentunya','tepat','terakhir','terasa','terbanyak','terdahulu','terdapat','terdiri', - 'terhadap','terhadapnya','teringat','teringat-ingat','terjadi','terjadilah','terjadinya','terkira', - 'terlalu','terlebih','terlihat','termasuk','ternyata','tersampaikan','tersebut','tersebutlah', - 'tertentu','tertuju','terus','terutama','tetap','tetapi','tiap','tiba','tiba-tiba','tidak', - 'tidakkah','tidaklah','tiga','toh','tuju','tunjuk','turut','tutur','tuturnya','u','ucap','ucapnya', - 'ujar','ujarnya','umumnya','ungkap','ungkapnya','untuk','usah','usai','v','w','waduh','wah','wahai', - 'waktunya','walau','walaupun','wong','x','y','ya','yaitu','yakin','yakni','yang','z'] + return self._stop_words + + @classmethod + def from_file(cls, filepath, delimiter=",", **kwargs): + """Create StopWordRemoverFactory instance with stopwords from file + + Example: + >>> text = 'Aku pernah mendengar Aisya bercerita bahwa sebenarnya ia tidak terlalu senang dengan kabar perjodohan yang diatur oleh orang tuanya.' + >>> factory = StopWordRemoverFactory.from_file('/path/to/stopwords.csv', delimiter=",", replace=True) + >>> remover = factory.create_stop_word_remover() + >>> print(remover.remove(text)) + + :param filepath: path to stopwords file, + :param delimiter: delimiter for each stopwords + :param replace: if set to True, will replace the default stopwords. + :return: class instance + :rtype: StopWordRemoverFactory + """ + replace = kwargs.pop("replace", False) + + _stack = [] + with open(filepath, 'rb') as f: + reader = csv.reader(f, delimiter=delimiter, **kwargs) + for r in reader: + _stack += r + _stack = list(set(_stack)) + + instance = cls() + if replace: + instance.stopwords = _stack + else: + instance.append_stop_words(_stack) + + return instance + def append_stop_words(self, stopwords): + """Append stopwords to default stopwords + :param stopwords: stopwords to append + :type stopwords: list + """ + if not isinstance(stopwords, list): + raise TypeError("expecting list, {} found".format(type(stopwords))) + self._stop_words = list(set(self.__DEFAULT_STOP_WORDS + stopwords)) diff --git a/tests/UnitTests/StopWordRemover/stop_word_remover_factory_test.py b/tests/UnitTests/StopWordRemover/stop_word_remover_factory_test.py index 5f758f8..1f103e6 100644 --- a/tests/UnitTests/StopWordRemover/stop_word_remover_factory_test.py +++ b/tests/UnitTests/StopWordRemover/stop_word_remover_factory_test.py @@ -1,6 +1,8 @@ import unittest -from Sastrawi.StopWordRemover.StopWordRemoverFactory import StopWordRemoverFactory + from Sastrawi.StopWordRemover.StopWordRemover import StopWordRemover +from Sastrawi.StopWordRemover.StopWordRemoverFactory import StopWordRemoverFactory + class Test_StopWordRemoverFactoryTest(unittest.TestCase): def setUp(self): @@ -10,5 +12,13 @@ def setUp(self): def test_createStopWordRemover(self): self.assertIsInstance(self.factory.create_stop_word_remover(), StopWordRemover) + def test_appendStopwords(self): + new_stopwords = ['dengan', 'ia', 'bahwa', 'oleh'] + self.factory.append_stop_words(new_stopwords) + + for sw in new_stopwords: + self.assertIn(sw, self.factory.stopwords, "Failed to append {} to stopwords".format(sw)) + + if __name__ == '__main__': unittest.main()