بسم الله الرحمن الرحيم

تجزئة النص Tokenize

تاريخ النشر : July 1, 2020

None


Tokenization

هو تقسيم النص ال ي وحدات أصغر تسمي token رمز , معظم الأحوال تكون كلمة وفي بعض الأحيان تكون جملة

يعني تقسيم النص إلي جُمل والجُمل ال كلمات (إسم وفعل وحرف)

يلاحظ أن تحديد الكلمات يختلف من لغة لأخرى، مثلا في الإنجليزية التحديد بالمسافات، لكن في العربية أحيانا يتصل حروف بالكلمة مثل “مدنها” -> “مدنــ”، “ـها”

الهدف من ذالك

تجزئت النص إلي وحدات أصغر يسهل التعامل معها

مثال تطبيقي بإستخدام مدونة gutenberg الموضمنة في مكتبة NLTK

وتحديدا علي ملف " austen-emma.txt "

البداية مع استيرا word_tokenizeو sent_tokenize و مدونة gutenberg

from nltk.tokenize import word_tokenize, sent_tokenize
from nltk.corpus import gutenberg
gutenberg.fileids()
['austen-emma.txt',
 'austen-persuasion.txt',
 'austen-sense.txt',
 'bible-kjv.txt',
 'blake-poems.txt',
 'bryant-stories.txt',
 'burgess-busterbrown.txt',
 'carroll-alice.txt',
 'chesterton-ball.txt',
 'chesterton-brown.txt',
 'chesterton-thursday.txt',
 'edgeworth-parents.txt',
 'melville-moby_dick.txt',
 'milton-paradise.txt',
 'shakespeare-caesar.txt',
 'shakespeare-hamlet.txt',
 'shakespeare-macbeth.txt',
 'whitman-leaves.txt']
r =gutenberg.raw(['austen-emma.txt'])
emma=r[50:477]
emma
"Emma Woodhouse, handsome, clever, and rich, with a comfortable home\nand happy disposition, seemed to unite some of the best blessings\nof existence; and had lived nearly twenty-one years in the world\nwith very little to distress or vex her.\n\nShe was the youngest of the two daughters of a most affectionate,\nindulgent father; and had, in consequence of her sister's marriage,\nbeen mistress of his house from a very early period."

تقسيم علي مستوي الجمل

s=sent_tokenize(emma)
len(s)
s[0]

تقسيم علي مستوي الكلمات

word_tokenize(s[0])
['Emma',
 'Woodhouse',
 ',',
 'handsome',
 ',',
 'clever',
 ',',
 'and',
 'rich',
 ',',
 'with',
 'a',
 'comfortable',
 'home',
 'and',
 'happy',
 'disposition',
 ',',
 'seemed',
 'to',
 'unite',
 'some',
 'of',
 'the',
 'best',
 'blessings',
 'of',
 'existence',
 ';',
 'and',
 'had',
 'lived',
 'nearly',
 'twenty-one',
 'years',
 'in',
 'the',
 'world',
 'with',
 'very',
 'little',
 'to',
 'distress',
 'or',
 'vex',
 'her',
 '.']

طريقة أخري باستخدام Regular expression

import re

def tokenize(text):
     tokens=re.split('\W+',text)
     return tokens

data['boday_text_x:tokenized']=data['boday_text_clean'].apply(lambda x:tokenize(x.lower() ) )
data.head()
المصادر

العودة إلي مكتبة NLTK