Noise removal : format text stripping(html tags)
Tokenizaiton : sperating words
Normalization : cleaning text
(stemming, Lemmatization(to the words' root),
lowercasing, stopwords removal, etc.
import re, nltk
from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize
from nltk.stem import WordNetLemmatizer
#텍스트 불러오기
text = looking_glass_text
# re 로 클린하기
cleaned = re.sub('\W+', ' ', text).lower()
#토크나이즈하기
tokenized = word_tokenize(cleaned)
#stoop words filtering
stop_words = stopwords.words('english')
filtered = [word for word in tokenized if word not in stop_words]
#lemmatize 하기. second arg(get_part_of_speech(token)) 주기
normalizer = WordNetLemmatizer()
normalized = [normalizer.lemmatize(token, get_part_of_speech(token)) for token in filtered]
spaCy
re
bag_of_looking_glass_words = Counter(normalizedtext)
단어별로 갯수 볼수 잇음
통계적 접근을 사용하고 있으므로 SLM의 일종 + 일부 단어만 고려하는 접근 방법
앞 단어 중 임의의 개수만 포함해서 카운트 -> 갖고 있는 코퍼스에서 해당 단어의 시퀀스를 카운트할 확률이 높아짐
임의의 개수를 정하기 위한 기준 n-gram (n개의 연속적인 단어 나열)
문제점:전체 문장을 고려한 언어 모델보다는 정확도가 떨어짐
looking_glass_bigrams = ngrams(tokenized, 2)
looking_glass_bigrams_frequency = Counter(looking_glass_bigrams)
print(looking_glass_bigrams_frequency.most_common(10))
토픽 모델링
텍스트 본문의 숨겨진 의미 구조를 발견하기 위해 사용되는 텍스트 마이닝 기법
uncovering latent topics within a body of language
term frequency-inverse document frequency (tf-idf)
: 너무 많이 반복되는 것은 거르기 -> gensim
sklearn
라이브러리 활용
latent Dirichlet allocation (LDA)
determines which words keep popping up together in the same contexts
word2vec
map out your topic model results spatially as vectors
= word embedding
반복되는 무의미한 단어 제외해줌으로써 토픽에 가까워지게
문서 유사도
기계가 계산하는 문서의 유사도의 성능은 각 문서의 단어들을 어떤 방법으로 수치화하여 표현했는지(DTM, Word2Vec 등), 문서 간의 단어들의 차이를 어떤 방법(유클리드 거리, 코사인 유사도 등)으로 계산했는지에 달려있습니다
Levenshtein distance : how far between two diff words
lexical similarity (the degree to which texts use the same vocabulary and phrases).
semantic similarity (the degree to which documents contain similar meaning or topics)