การกั้น

การกั้นคำเป็นกระบวนการลดคำลงจนได้คำต้นกำเนิด/ฐาน มันตัดตัวอักษรออกจากตอนท้าย ขณะค้นหาคำสำคัญเฉพาะ ระบบจะส่งกลับคำบางรูปแบบจากเอกสาร

ตัวอย่าง: ค้นหาคำว่า 'เรือ', ส่งกลับเรือ, คนพายเรือ, พายเรือ ฯลฯ

ที่นี่คำต้นกำเนิดคือเรือและคำต่อท้ายจะถูกลบออกจนกว่าจะถึงคำต้นกำเนิด

สเตมเมอร์มี 2 ประเภท:

  • พอร์เตอร์ สตีมเมอร์
  • สโนว์บอล สเต็มเมอร์

พอร์เตอร์ สตีมเมอร์:

หนึ่งในเครื่องมือสกัดกั้นที่ใช้กันทั่วไปและมีประสิทธิภาพที่สุด ผ่านการลดคำห้าขั้นตอน

from nltk.stem.porter import PorterStemmer
p_stemmer = PorterStemmer()
words = ['run', 'runner', 'ran', 'runs', 'easily', 'fairly', 'fairness']
for word in words:
    print(word + '---->' + p_stemmer.stem(word))
print("\n")

OUTPUT:
run---->run
runner---->runner
ran---->ran
runs---->run
easily---->easili
fairly---->fairli
fairness---->fair

สโนว์บอลสเต็มเมอร์:

เป็นการปรับปรุงก้านของ Porter ในแง่ของความเร็วและความแม่นยำ

from nltk.stem.snowball import SnowballStemmer
p_stemmer = PorterStemmer()
words = ['run', 'runner', 'ran', 'runs', 'easily', 'fairly', 'fairness']
for word in words:
    print(word + '---->' + p_stemmer.stem(word))
print("\n")

OUTPUT: 
run---->run
runner---->runner
ran---->ran
runs---->run
easily---->easili
fairly---->fairli
fairness---->fair

การย่อคำ

โครงสร้างการวิเคราะห์การย่อคำของคำ มันมีประโยชน์และให้ข้อมูลมากกว่าการสกัดกั้น โดยจะวิเคราะห์คำที่อยู่รอบๆ เพื่อกำหนดตำแหน่ง (ส่วนหนึ่งของคำพูด) ของคำ

import spacy
nlp = spacy.load('en_core_web_sm')
doc = nlp(u'I am a runner running in a race because i love to run since i ran today')
for token in doc:
    print(f'{token.text:{12}} {token.pos:{6}} {token.lemma:<{22}} {token.lemma_}')
show_lemmas(doc)


OUTPUT:
I                95 4690420944186131903    I
am               87 10382539506755952630   be
a                90 11901859001352538922   a
runner           92 12640964157389618806   runner
running         100 12767647472892411841   run
in               85 3002984154512732771    in
a                90 11901859001352538922   a
race             92 8048469955494714898    race
because          98 16950148841647037698   because
i                95 4690420944186131903    I
love            100 3702023516439754181    love
to               94 3791531372978436496    to
run             100 12767647472892411841   run
since            98 10066841407251338481   since
i                95 4690420944186131903    I
ran             100 12767647472892411841   run
today            92 11042482332948150395   today

หยุดคำพูด

คำหยุดเป็นคำที่เกิดขึ้นบ่อยครั้งซึ่งไม่จำเป็นต้องมีการแท็ก ดังนั้นสิ่งเหล่านี้จึงถูกกรองออกจากข้อความที่จะประมวลผล คำเหล่านี้เป็นคำนามที่ใช้บ่อย และคำกริยาเช่น is, the, a ฯลฯ

คำหยุดเริ่มต้น:
เราสามารถรับความยาวของคำหยุดเริ่มต้นที่ตั้งไว้ได้เช่นกันโดยใช้ฟังก์ชัน len()

import spacy
nlp = spacy.load('en_core_web_sm')

# Print the set of spaCy's default stop words:
print(nlp.Defaults.stop_words)

print(f"\n Length of default stop words is: {len(nlp.Defaults.stop_words)}")

OUTPUT:
{"'d", "'ll", "'m", "'re", "'s", "'ve", 'a',.. '’ll', '’m', '’re', '’s', '’ve'}

Length of default stop words is: 326

ดูว่าคำนั้นเป็นคำหยุดหรือไม่:
ในการตรวจสอบว่าคำใดคำหนึ่งเป็นคำหยุดหรือไม่ เราสามารถตรวจสอบได้ว่าใช้ is_stop

#Checks in entire set
nlp.vocab['is'].is_stop  
nlp.vocab['mystery'].is_stop

OUTPUT:
True
False

เพิ่มคำหยุด:
เราสามารถเพิ่มคำหยุดใหม่ในชุดคำหยุดเริ่มต้นได้

nlp.Defaults.stop_words.add('btw')
nlp.vocab['btw'].is_stop

OUTPUT:
True

ลบคำหยุด:
เราสามารถลบคำออกจากค่าเริ่มต้นและตรวจสอบเพื่อยืนยันว่าคำนั้นถูกลบออกไปแล้วหรือไม่

nlp.Defaults.stop_words.remove('beyond')
nlp.vocab['beyond'].is_stop

OUTPUT:
False

ค้นหาซอร์สโค้ดของฉันสำหรับบทความนี้

การกั้นขวาง



การย่อ



หยุดคำพูด



เกี่ยวกับฉัน

ฉันชื่อ Shreya Khandelwal นักวิทยาศาสตร์ด้านข้อมูล อย่าลังเลที่จะติดต่อกับฉันทาง LinkedIn!

ติดตามฉันใน "สื่อ" เพื่อรับการอัปเดตเป็นประจำในหัวข้อที่คล้ายกัน