Python Web Scraping - การจัดการกับข้อความ
ในบทที่แล้วเราได้เห็นวิธีจัดการกับวิดีโอและรูปภาพที่เราได้รับเป็นส่วนหนึ่งของเนื้อหาในการขูดเว็บ ในบทนี้เราจะจัดการกับการวิเคราะห์ข้อความโดยใช้ไลบรารี Python และจะเรียนรู้เกี่ยวกับเรื่องนี้โดยละเอียด
บทนำ
คุณสามารถทำการวิเคราะห์ข้อความโดยใช้ไลบรารี Python ที่เรียกว่า Natural Language Tool Kit (NLTK) ก่อนดำเนินการตามแนวคิดของ NLTK ขอให้เราเข้าใจความสัมพันธ์ระหว่างการวิเคราะห์ข้อความและการคัดลอกเว็บ
การวิเคราะห์คำในข้อความสามารถทำให้เรารู้ว่าคำไหนสำคัญคำไหนผิดปกติมีการจัดกลุ่มคำอย่างไร การวิเคราะห์นี้ช่วยให้งานขูดเว็บง่ายขึ้น
เริ่มต้นกับ NLTK
ชุดเครื่องมือภาษาธรรมชาติ (NLTK) คือชุดของไลบรารี Python ซึ่งออกแบบมาโดยเฉพาะสำหรับการระบุและแท็กส่วนของคำพูดที่พบในข้อความของภาษาธรรมชาติเช่นภาษาอังกฤษ
การติดตั้ง NLTK
คุณสามารถใช้คำสั่งต่อไปนี้เพื่อติดตั้ง NLTK ใน Python -
pip install nltk
หากคุณใช้ Anaconda คุณสามารถสร้างแพ็คเกจ conda สำหรับ NLTK ได้โดยใช้คำสั่งต่อไปนี้ -
conda install -c anaconda nltk
กำลังดาวน์โหลดข้อมูลของ NLTK
หลังจากติดตั้ง NLTK เราต้องดาวน์โหลดที่เก็บข้อความที่ตั้งไว้ล่วงหน้า แต่ก่อนที่จะดาวน์โหลดที่เก็บข้อความที่ตั้งไว้ล่วงหน้าเราจำเป็นต้องนำเข้า NLTK ด้วยความช่วยเหลือของไฟล์import คำสั่งดังนี้ -
mport nltk
ตอนนี้ด้วยความช่วยเหลือของคำสั่งต่อไปนี้ข้อมูล NLTK สามารถดาวน์โหลดได้ -
nltk.download()
การติดตั้งแพ็คเกจทั้งหมดที่มีของ NLTK จะใช้เวลาพอสมควร แต่ขอแนะนำให้ติดตั้งแพ็คเกจทั้งหมดเสมอ
การติดตั้งแพ็คเกจที่จำเป็นอื่น ๆ
เราต้องการแพ็คเกจ Python อื่น ๆ เช่น gensim และ pattern สำหรับการวิเคราะห์ข้อความและการสร้างแอปพลิเคชันการประมวลผลภาษาธรรมชาติโดยใช้ NLTK
gensim- ไลบรารีการสร้างแบบจำลองความหมายที่แข็งแกร่งซึ่งมีประโยชน์สำหรับแอปพลิเคชันมากมาย สามารถติดตั้งได้โดยคำสั่งต่อไปนี้ -
pip install gensim
pattern - ใช้ในการทำ gensimแพคเกจทำงานอย่างถูกต้อง สามารถติดตั้งได้โดยคำสั่งต่อไปนี้ -
pip install pattern
Tokenization
กระบวนการทำลายข้อความที่กำหนดให้เป็นหน่วยเล็ก ๆ ที่เรียกว่าโทเค็นเรียกว่าโทเค็น โทเค็นเหล่านี้อาจเป็นคำตัวเลขหรือเครื่องหมายวรรคตอน เรียกอีกอย่างว่าword segmentation.
ตัวอย่าง
โมดูล NLTK มีแพ็คเกจที่แตกต่างกันสำหรับโทเค็น เราสามารถใช้แพ็คเกจเหล่านี้ได้ตามความต้องการของเรา บางส่วนของแพ็คเกจมีอธิบายไว้ที่นี่ -
sent_tokenize package- แพ็คเกจนี้จะแบ่งข้อความที่ป้อนออกเป็นประโยค คุณสามารถใช้คำสั่งต่อไปนี้เพื่อนำเข้าแพ็คเกจนี้ -
from nltk.tokenize import sent_tokenize
word_tokenize package- แพ็คเกจนี้จะแบ่งข้อความที่ป้อนเป็นคำ คุณสามารถใช้คำสั่งต่อไปนี้เพื่อนำเข้าแพ็คเกจนี้ -
from nltk.tokenize import word_tokenize
WordPunctTokenizer package- แพ็คเกจนี้จะแบ่งข้อความที่ป้อนและเครื่องหมายวรรคตอนออกเป็นคำ คุณสามารถใช้คำสั่งต่อไปนี้เพื่อนำเข้าแพ็คเกจนี้ -
from nltk.tokenize import WordPuncttokenizer
Stemming
ในภาษาใด ๆ มีคำในรูปแบบต่างๆ ภาษามีรูปแบบต่างๆมากมายเนื่องจากเหตุผลทางไวยากรณ์ ตัวอย่างเช่นพิจารณาคำdemocracy, democraticและ democratization. สำหรับแมชชีนเลิร์นนิงและโปรเจ็กต์การขูดเว็บสิ่งสำคัญคือต้องให้เครื่องจักรเข้าใจว่าคำต่างๆเหล่านี้มีรูปแบบฐานเดียวกัน ดังนั้นเราสามารถพูดได้ว่าการแยกรูปแบบฐานของคำในขณะที่วิเคราะห์ข้อความจะมีประโยชน์
สิ่งนี้สามารถทำได้โดยการแยกส่วนซึ่งอาจนิยามได้ว่าเป็นกระบวนการฮิวริสติกในการแยกรูปแบบฐานของคำโดยการตัดส่วนท้ายของคำออก
โมดูล NLTK มีแพ็คเกจที่แตกต่างกันสำหรับการสกัดกั้น เราสามารถใช้แพ็คเกจเหล่านี้ได้ตามความต้องการของเรา บางส่วนของแพ็คเกจเหล่านี้มีคำอธิบายไว้ที่นี่ -
PorterStemmer package- อัลกอริทึมของ Porter ถูกใช้โดยแพ็คเกจ Python Stemming นี้เพื่อดึงรูปแบบพื้นฐาน คุณสามารถใช้คำสั่งต่อไปนี้เพื่อนำเข้าแพ็คเกจนี้ -
from nltk.stem.porter import PorterStemmer
ตัวอย่างเช่นหลังจากให้คำ ‘writing’ ในฐานะที่เป็นอินพุตของตัวตั้งต้นนี้ผลลัพธ์จะเป็นคำ ‘write’ หลังจากหยุดชะงัก
LancasterStemmer package- อัลกอริทึมของ Lancaster ใช้โดยแพ็คเกจ Python Stemming นี้เพื่อแยกรูปแบบพื้นฐาน คุณสามารถใช้คำสั่งต่อไปนี้เพื่อนำเข้าแพ็คเกจนี้ -
from nltk.stem.lancaster import LancasterStemmer
ตัวอย่างเช่นหลังจากให้คำ ‘writing’ ในฐานะที่เป็นอินพุตของสเต็มเมอร์นี้ผลลัพธ์จะเป็นคำ ‘writ’ หลังจากหยุดชะงัก
SnowballStemmer package- อัลกอริทึมของ Snowball ใช้โดยแพ็คเกจ Python Stemming เพื่อแยกรูปแบบพื้นฐาน คุณสามารถใช้คำสั่งต่อไปนี้เพื่อนำเข้าแพ็คเกจนี้ -
from nltk.stem.snowball import SnowballStemmer
ตัวอย่างเช่นหลังจากให้คำว่า 'เขียน' เป็นอินพุตของตัวเริ่มต้นแล้วผลลัพธ์จะเป็นคำว่า 'เขียน' หลังจากที่กำหนด
Lemmatization
อีกวิธีหนึ่งในการแยกรูปแบบฐานของคำคือการทำให้เป็นตัวอักษรโดยปกติมีจุดมุ่งหมายเพื่อลบคำลงท้ายที่ผันแปรโดยใช้คำศัพท์และการวิเคราะห์ทางสัณฐานวิทยา รูปแบบฐานของคำใด ๆ หลังการทำให้เป็นตัวอักษรเรียกว่า lemma
โมดูล NLTK มีแพ็คเกจต่อไปนี้สำหรับการย่อขนาด -
WordNetLemmatizer package- มันจะดึงรูปแบบฐานของคำขึ้นอยู่กับว่าใช้เป็นคำนามเป็นคำกริยาหรือไม่ คุณสามารถใช้คำสั่งต่อไปนี้เพื่อนำเข้าแพ็คเกจนี้ -
from nltk.stem import WordNetLemmatizer
การจัดเป็นกลุ่ม
การจัดกลุ่มซึ่งหมายถึงการแบ่งข้อมูลออกเป็นชิ้นเล็ก ๆ เป็นหนึ่งในกระบวนการที่สำคัญในการประมวลผลภาษาธรรมชาติเพื่อระบุส่วนของคำพูดและวลีสั้น ๆ เช่นวลีคำนาม Chunking คือการทำฉลากของโทเค็น เราสามารถรับโครงสร้างของประโยคด้วยความช่วยเหลือของกระบวนการแยกชิ้นส่วน
ตัวอย่าง
ในตัวอย่างนี้เราจะใช้ Noun-Phrase chunking โดยใช้โมดูล NLTK Python NP chunking เป็นหมวดหมู่ของ chunking ซึ่งจะพบคำนามวลีในประโยค
ขั้นตอนในการใช้การแบ่งวลีคำนาม
เราจำเป็นต้องทำตามขั้นตอนที่ระบุด้านล่างสำหรับการใช้คำนามวลี -
ขั้นตอนที่ 1 - นิยามไวยากรณ์แบบกลุ่ม
ในขั้นตอนแรกเราจะกำหนดไวยากรณ์สำหรับ chunking มันจะประกอบด้วยกฎที่เราต้องปฏิบัติตาม
ขั้นตอนที่ 2 - การสร้างตัวแยกวิเคราะห์แบบก้อน
ตอนนี้เราจะสร้างตัวแยกวิเคราะห์แบบก้อน มันจะแยกวิเคราะห์ไวยากรณ์และให้ผลลัพธ์
ขั้นตอนที่ 3 - ผลลัพธ์
ในขั้นตอนสุดท้ายนี้ผลลัพธ์จะถูกสร้างในรูปแบบต้นไม้
ก่อนอื่นเราต้องนำเข้าแพ็คเกจ NLTK ดังนี้ -
import nltk
ต่อไปเราต้องกำหนดประโยค ที่นี่ DT: ดีเทอร์มิแนนต์, VBP: คำกริยา, JJ: คำคุณศัพท์, IN: คำบุพบทและ NN: คำนาม
sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]
ต่อไปเราจะให้ไวยากรณ์ในรูปแบบของนิพจน์ทั่วไป
grammar = "NP:{<DT>?<JJ>*<NN>}"
ตอนนี้บรรทัดถัดไปของโค้ดจะกำหนดตัวแยกวิเคราะห์สำหรับการแยกวิเคราะห์ไวยากรณ์
parser_chunking = nltk.RegexpParser(grammar)
ตอนนี้โปรแกรมแยกวิเคราะห์จะแยกวิเคราะห์ประโยค
parser_chunking.parse(sentence)
ต่อไปเราจะให้ผลลัพธ์ของเราในตัวแปร
Output = parser_chunking.parse(sentence)
ด้วยความช่วยเหลือของรหัสต่อไปนี้เราสามารถวาดผลลัพธ์ของเราในรูปแบบของต้นไม้ดังที่แสดงด้านล่าง
output.draw()
Bag of Word (BoW) Model การแยกและแปลงข้อความเป็นรูปแบบตัวเลข
Bag of Word (BoW) ซึ่งเป็นรูปแบบที่มีประโยชน์ในการประมวลผลภาษาธรรมชาติโดยทั่วไปจะใช้เพื่อแยกคุณสมบัติออกจากข้อความ หลังจากแยกคุณสมบัติออกจากข้อความแล้วจะสามารถใช้ในการสร้างแบบจำลองในอัลกอริทึมการเรียนรู้ของเครื่องเนื่องจากไม่สามารถใช้ข้อมูลดิบในแอปพลิเคชัน ML ได้
การทำงานของ BoW Model
ในขั้นต้นโมเดลจะแยกคำศัพท์จากคำทั้งหมดในเอกสาร ต่อมาโดยใช้เมทริกซ์คำศัพท์ของเอกสารจะสร้างแบบจำลอง ด้วยวิธีนี้แบบจำลอง BoW จะแสดงเอกสารเป็นถุงคำเท่านั้นและคำสั่งหรือโครงสร้างจะถูกทิ้ง
ตัวอย่าง
สมมติว่าเรามีสองประโยคต่อไปนี้ -
Sentence1 - นี่คือตัวอย่างโมเดล Bag of Words
Sentence2 - เราสามารถดึงคุณสมบัติโดยใช้โมเดล Bag of Words
ตอนนี้เมื่อพิจารณาสองประโยคนี้เรามีคำที่แตกต่างกัน 14 คำต่อไปนี้ -
- This
- is
- an
- example
- bag
- of
- words
- model
- we
- can
- extract
- features
- by
- using
การสร้างแบบจำลองถุงคำใน NLTK
ให้เราดูสคริปต์ Python ต่อไปนี้ซึ่งจะสร้างโมเดล BoW ใน NLTK
ขั้นแรกให้นำเข้าแพ็คเกจต่อไปนี้ -
from sklearn.feature_extraction.text import CountVectorizer
จากนั้นกำหนดชุดของประโยค -
Sentences=['This is an example of Bag of Words model.', ' We can extract
features by using Bag of Words model.']
vector_count = CountVectorizer()
features_text = vector_count.fit_transform(Sentences).todense()
print(vector_count.vocabulary_)
เอาต์พุต
แสดงว่าเรามีคำที่แตกต่างกัน 14 คำในสองประโยคข้างต้น -
{
'this': 10, 'is': 7, 'an': 0, 'example': 4, 'of': 9,
'bag': 1, 'words': 13, 'model': 8, 'we': 12, 'can': 3,
'extract': 5, 'features': 6, 'by': 2, 'using':11
}
การสร้างแบบจำลองหัวข้อ: การระบุรูปแบบในข้อมูลข้อความ
โดยทั่วไปเอกสารจะถูกจัดกลุ่มเป็นหัวข้อและการสร้างแบบจำลองหัวข้อเป็นเทคนิคในการระบุรูปแบบในข้อความที่สอดคล้องกับหัวข้อเฉพาะ กล่าวอีกนัยหนึ่งการสร้างแบบจำลองหัวข้อจะใช้เพื่อเปิดเผยธีมนามธรรมหรือโครงสร้างที่ซ่อนอยู่ในชุดเอกสารที่กำหนด
คุณสามารถใช้การสร้างแบบจำลองหัวข้อในสถานการณ์ต่อไปนี้ -
การจัดประเภทข้อความ
การจัดหมวดหมู่สามารถปรับปรุงได้โดยการสร้างแบบจำลองหัวข้อเนื่องจากจัดกลุ่มคำที่คล้ายกันเข้าด้วยกันแทนที่จะใช้คำแต่ละคำแยกกันเป็นคุณลักษณะ
ระบบผู้แนะนำ
เราสามารถสร้างระบบผู้แนะนำโดยใช้มาตรการความคล้ายคลึงกัน
อัลกอริทึมการสร้างแบบจำลองหัวข้อ
เราสามารถใช้การสร้างแบบจำลองหัวข้อโดยใช้อัลกอริทึมต่อไปนี้ -
Latent Dirichlet Allocation(LDA) - เป็นหนึ่งในอัลกอริทึมที่ได้รับความนิยมมากที่สุดที่ใช้โมเดลกราฟิกที่น่าจะเป็นในการใช้การสร้างแบบจำลองหัวข้อ
Latent Semantic Analysis(LDA) or Latent Semantic Indexing(LSI) - ขึ้นอยู่กับ Linear Algebra และใช้แนวคิดของ SVD (Singular Value Decomposition) บนเมทริกซ์คำศัพท์ของเอกสาร
Non-Negative Matrix Factorization (NMF) - มันขึ้นอยู่กับพีชคณิตเชิงเส้นเช่นเดียวกับ LDA
อัลกอริทึมที่กล่าวถึงข้างต้นจะมีองค์ประกอบดังต่อไปนี้ -
- จำนวนหัวข้อ: พารามิเตอร์
- Document-Word Matrix: อินพุต
- WTM (เมทริกซ์หัวข้อของ Word) และ TDM (เมทริกซ์เอกสารหัวข้อ): เอาต์พุต