def test_mm(self): self.assertEqual(multi_cut.segment(None), []) self.assertEqual(multi_cut.segment(""), []) self.assertIsNotNone(multi_cut.segment("ตัด", dict_trie([""]))) self.assertEqual(word_tokenize("", engine="mm"), []) self.assertEqual( word_tokenize("ฉันรักภาษาไทยเพราะฉันเป็นคนไทย", engine="mm"), ["ฉัน", "รัก", "ภาษาไทย", "เพราะ", "ฉัน", "เป็น", "คนไทย"], ) self.assertIsNotNone(multi_cut.mmcut("ทดสอบ")) self.assertIsNotNone( multi_cut.find_all_segment("รถไฟฟ้ากรุงเทพมหานครBTS")) self.assertEqual(multi_cut.find_all_segment(None), [])
def test_word_tokenize(self): self.assertEqual(word_tokenize(""), []) self.assertEqual( word_tokenize("ฉันรักภาษาไทยเพราะฉันเป็นคนไทย"), ["ฉัน", "รัก", "ภาษาไทย", "เพราะ", "ฉัน", "เป็น", "คนไทย"], ) self.assertIsNotNone(word_tokenize(self.text_1, engine="newmm")) self.assertIsNotNone(word_tokenize(self.text_1, engine="mm")) self.assertIsNotNone(word_tokenize(self.text_1, engine="longest")) self.assertIsNotNone(word_tokenize(self.text_1, engine="icu")) self.assertIsNotNone(word_tokenize(self.text_1, engine="deepcut")) self.assertIsNotNone(word_tokenize(self.text_1, engine="attacut")) with self.assertRaises(ValueError): word_tokenize("หมอนทอง", engine="XX") # engine does not exist self.assertTrue( "ไฟ" in word_tokenize("รถไฟฟ้า", custom_dict=dict_trie(["ไฟ"])))
def __init__(self): # ----------------------NLP thai------------------------------------ # stopwords_th.txt with codecs.open("dataset/stopwords_th.txt", "r") as f: lines = f.readlines() listpos=[e.strip() for e in lines] del lines f.close() # ปิดไฟล์ self.stopwords_thai = listpos modul=self.loadData("Modul") self.classifier = modul[0] self.vocabulary = modul[1] # คำไทย """read = open("dataset/thai_words.txt", "r") words = [] add_words = set(thai_words()) # thai_words() returns frozenset for m in read: add_words.add(m.split("\n")[0])""" self.custom_tokenizer = dict_trie(thai_words()) # ------------------------------------------------------------------ # ----------------------NLP english------------------------------------ self.nlp = spacy.load("en_core_web_md") self.sia = SentimentIntensityAnalyzer() self.STOP_WORD_1 = self.nlp.Defaults.stop_words # stop word ของ spacy self.STOP_WORD_2 = stopwords.words('english') # stop word ของ nltk self.STOP_WORD_3 = STOP_WORDS # stop word ของ spacy # ------------------------------------------------------------------ # ----------------------detector-------------------------------------------- self.nlp.add_pipe(LanguageDetector(), name='language_detector', last=True) # -------------------------------------------------------------------------- self.dict_vocab = {i:False for i in self.vocabulary}
def test_mm(self): self.assertEqual(multi_cut.segment(None), []) self.assertEqual(multi_cut.segment(""), []) self.assertIsNotNone(multi_cut.segment("ตัด", dict_trie([""]))) self.assertEqual(word_tokenize("", engine="mm"), []) self.assertEqual( word_tokenize("ฉันรักภาษาไทยเพราะฉันเป็นคนไทย", engine="mm"), ["ฉัน", "รัก", "ภาษาไทย", "เพราะ", "ฉัน", "เป็น", "คนไทย"], ) self.assertEqual( word_tokenize("19...", engine="mm"), ['19', '...'], ) self.assertEqual( word_tokenize("19.", engine="mm"), ['19', '.'], ) self.assertEqual( word_tokenize("19.84", engine="mm"), ['19.84'], ) self.assertEqual( word_tokenize("127.0.0.1", engine="mm"), ["127.0.0.1"], ) self.assertEqual( word_tokenize("USD1,984.42", engine="mm"), ['USD', '1,984.42'], ) self.assertIsNotNone(multi_cut.mmcut("ทดสอบ")) self.assertIsNotNone( multi_cut.find_all_segment("รถไฟฟ้ากรุงเทพมหานครBTS") ) self.assertEqual(multi_cut.find_all_segment(None), [])
'เซเวน', '7 11', 'สตาร์บัค', 'อเมซอน', 'ท็อปส์', 'ทอปส์', 'ท้อปส์', 'ท๊อปส์', 'แมคโคร', 'แม็คโคร', 'โลตัส', 'บิ๊กซี', 'bigc', 'golden place', 'big c', 'ขายไม่ดี', 'แพคคู่', 'ค่าจัดส่ง', 'shelf life', 'พนักงานขายนม', 'ซื้อประจำ', 'หายาก', 'หาซื้อ', 'ของแถม', 'ราคาสูง', 'น้ำนมโค', 'นมโคแท้', 'นมแพะ', 'นมโรงเรียน', 'แพ้นม', 'แพ้นมวัว', 'นมอัดเม็ด', 'เล่นเวท', 'นำ้หนัก', 'คุณแม่มือใหม่', 'นมอุ่น', 'ชานม', 'กินนม', 'ดื่มนม', 'ท้องเสีย', 'ขี้แตก', 'คุมอาหาร', 'นักวิ่ง', 'ร้านนมสด', 'ดูแลสุขภาพ', 'คนท้อง', 'มวลกระดูก', 'คีเฟอร์นม', 'พันทิป', 'ร้านนม', 'เหมียวน้อย', 'ลูกสุนัข', 'ลูกหมา', 'คายทิ้ง', 'เจมส์ จิ', 'เจมส์จิ', 'ณเดช', 'ณเดชน์', 'สตอรี่', 'อยากสูง', 'ส่วนสูง', 'สูงขึ้น', 'รักษามะเร็ง', 'รักษาเบาหวาน', 'ไม่มี', 'ไม่ชอบ', 'ไม่ได้', 'ไม่อร่อย', 'ชาไข่มุก', 'ชานมไข่มุก', 'นมข้น', 'อเมซอน', 'นมเมจิสีฟ้า', 'ทำฟอง', 'ตีฟอง', 'โฟมนม', 'มื้อเช้า', 'ไขมันทรานส์', 'ดาราเดลี่', 'แดรี่ฟาร์ม', 'แดรี่ควีน' ] words = set(thai_words()).union(set(custom_list)) _trie = dict_trie(dict_source=words) _tokenizer = Tokenizer(custom_dict=_trie, engine=_TOKENIZER_ENGINE) ######################################################## def _is_stopword(word: str) -> bool: # เช็คว่าเป็นคำฟุ่มเฟือย return word in thai_stopwords() def _doc2features(doc, i) -> dict: word = doc[i][0] postag = doc[i][1] # Features from current word features = {
from pythainlp import * from pythainlp.tag.named_entity import ThaiNameTagger from pythainlp.corpus.common import thai_words from pythainlp.util import dict_trie from decouple import config newWords = ["ไม่ดี", "ไม่พอใจ", "ชั่วคราว"] custom_words_list = set(thai_words()) custom_words_list.update(newWords) trie = dict_trie(dict_source=custom_words_list) custom_tokenizer = Tokenizer(custom_dict=trie, engine='newmm', keep_whitespace=False) class NLP: def __init__(self): self.positive_words = [] self.negative_words = [] self.swear_words = [] self.check_words = [] self.food_words = [] self.spa_words = [] self.beauty_words = [] self.travel_words = [] self.health_words = [] with open(config("NEGATIVE_SENTIMENT_WORDS"), 'r', encoding='utf-8') as f: for line in f: self.negative_words.append(line.rstrip())
def test_trie(self): self.assertIsNotNone(Trie([])) self.assertIsNotNone(Trie(["ทดสอบ", "ทด", "ทอด", "ทอผ้า"])) self.assertIsNotNone(Trie({"ทอด", "ทอง", "ทาง"})) self.assertIsNotNone(Trie(("ทอด", "ทอง", "ทาง"))) self.assertIsNotNone(Trie(Trie(["ทดสอบ", "ทดลอง"]))) trie = Trie(["ทด", "ทดสอบ", "ทดลอง"]) self.assertIn("ทด", trie) trie.add("ทบ") self.assertEqual(len(trie), 4) self.assertEqual(len(trie.prefixes("ทดสอบ")), 2) trie.remove("ทบ") trie.remove("ทด") self.assertEqual(len(trie), 2) trie = Trie([]) self.assertEqual(len(trie), 0) trie.remove("หมด") self.assertEqual(len(trie), 0) self.assertIsNotNone(dict_trie(Trie(["ลอง", "ลาก"]))) self.assertIsNotNone(dict_trie(("ลอง", "สร้าง", "Trie", "ลน"))) self.assertIsNotNone(dict_trie(["ลอง", "สร้าง", "Trie", "ลน"])) self.assertIsNotNone(dict_trie({"ลอง", "สร้าง", "Trie", "ลน"})) self.assertIsNotNone(dict_trie(thai_words())) self.assertIsNotNone( dict_trie(os.path.join(_CORPUS_PATH, _THAI_WORDS_FILENAME))) with self.assertRaises(TypeError): dict_trie("") with self.assertRaises(TypeError): dict_trie(None) with self.assertRaises(TypeError): dict_trie(42)