Python 웹 스크랩 핑-텍스트 다루기

이전 장에서 웹 스크래핑 콘텐츠의 일부로 얻은 비디오와 이미지를 처리하는 방법을 살펴 보았습니다. 이 장에서는 Python 라이브러리를 사용하여 텍스트 분석을 다루고 이에 대해 자세히 알아볼 것입니다.

소개

NLTK (Natural Language Tool Kit)라는 Python 라이브러리를 사용하여 텍스트 분석을 수행 할 수 있습니다. NLTK의 개념을 시작하기 전에 텍스트 분석과 웹 스크래핑의 관계를 이해해 보겠습니다.

텍스트의 단어를 분석하면 어떤 단어가 중요한지, 어떤 단어가 비정상적인지, 단어가 어떻게 그룹화되는지 알 수 있습니다. 이 분석은 웹 스크래핑 작업을 용이하게합니다.

NLTK 시작하기

자연어 도구 키트 (NLTK)는 영어와 같은 자연어 텍스트에서 발견되는 품사를 식별하고 태그를 지정하기 위해 특별히 설계된 Python 라이브러리 모음입니다.

NLTK 설치

다음 명령을 사용하여 Python에 NLTK를 설치할 수 있습니다.

pip install nltk

Anaconda를 사용하는 경우 다음 명령을 사용하여 NLTK 용 conda 패키지를 빌드 할 수 있습니다.

conda install -c anaconda nltk

NLTK의 데이터 다운로드

NLTK를 설치 한 후 미리 설정된 텍스트 저장소를 다운로드해야합니다. 그러나 텍스트 사전 설정 저장소를 다운로드하기 전에 다음의 도움으로 NLTK를 가져와야합니다.import 다음과 같이 명령-

mport nltk

이제 다음 명령을 사용하여 NLTK 데이터를 다운로드 할 수 있습니다.

nltk.download()

사용 가능한 모든 NLTK 패키지를 설치하는 데 다소 시간이 걸리지 만 항상 모든 패키지를 설치하는 것이 좋습니다.

기타 필요한 패키지 설치

또한 다음과 같은 다른 Python 패키지가 필요합니다. gensimpattern 텍스트 분석을 수행하고 NLTK를 사용하여 자연어 처리 응용 프로그램을 구축합니다.

gensim− 많은 애플리케이션에 유용한 강력한 시맨틱 모델링 라이브러리. 다음 명령으로 설치할 수 있습니다-

pip install gensim

pattern − 만드는 데 사용 gensim패키지가 제대로 작동합니다. 다음 명령으로 설치할 수 있습니다-

pip install pattern

토큰 화

주어진 텍스트를 토큰이라고하는 더 작은 단위로 나누는 과정을 토큰 화라고합니다. 이러한 토큰은 단어, 숫자 또는 구두점 일 수 있습니다. 그것은 또한 불린다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

어간

모든 언어에는 다양한 형태의 단어가 있습니다. 언어에는 문법적인 이유로 많은 변형이 포함됩니다. 예를 들어democracy, democratic, 및 democratization. 기계 학습 및 웹 스크래핑 프로젝트의 경우 기계가 이러한 다른 단어가 동일한 기본 형식을 가지고 있음을 이해하는 것이 중요합니다. 따라서 텍스트를 분석하면서 단어의 기본 형태를 추출하는 것이 유용하다고 말할 수 있습니다.

이것은 단어의 끝을 잘라내어 단어의 기본 형태를 추출하는 휴리스틱 프로세스로 정의 될 수있는 형태소 분석에 의해 달성 될 수 있습니다.

NLTK 모듈은 형태소 분석을위한 다양한 패키지를 제공합니다. 우리는 우리의 요구 사항에 따라 이러한 패키지를 사용할 수 있습니다. 이러한 패키지 중 일부는 여기에 설명되어 있습니다.

PorterStemmer package−이 Python 형태소 분석 패키지는 Porter의 알고리즘을 사용하여 기본 형식을 추출합니다. 다음 명령을 사용하여이 패키지를 가져올 수 있습니다.

from nltk.stem.porter import PorterStemmer

예를 들어, ‘writing’ 이 형태소 분석기에 대한 입력으로 출력은 ‘write’ 형태소 분석 후.

LancasterStemmer package− Lancaster의 알고리즘은이 Python 형태소 분석 패키지에서 기본 형식을 추출하는 데 사용됩니다. 다음 명령을 사용하여이 패키지를 가져올 수 있습니다.

from nltk.stem.lancaster import LancasterStemmer

예를 들어, ‘writing’ 이 형태소 분석기에 대한 입력으로 출력은 단어가됩니다. ‘writ’ 형태소 분석 후.

SnowballStemmer package− Snowball의 알고리즘은이 Python 형태소 분석 패키지에서 기본 형식을 추출하는 데 사용됩니다. 다음 명령을 사용하여이 패키지를 가져올 수 있습니다.

from nltk.stem.snowball import SnowballStemmer

예를 들어이 형태소 분석기의 입력으로 'writing'이라는 단어를 제공하면 형태소 분석 후 출력은 'write'라는 단어가됩니다.

주형 화

기본 형태의 단어를 추출하는 또 다른 방법은 lemmatization으로, 일반적으로 어휘 및 형태 학적 분석을 사용하여 굴절 어미를 제거하는 것을 목표로합니다. lemmatization 이후의 모든 단어의 기본 형식을 기본형이라고합니다.

NLTK 모듈은 lemmatization을 위해 다음 패키지를 제공합니다-

WordNetLemmatizer package− 동사로 명사로 사용되는지 여부에 따라 단어의 기본형을 추출합니다. 다음 명령을 사용하여이 패키지를 가져올 수 있습니다.

from nltk.stem import WordNetLemmatizer

청킹

데이터를 작은 청크로 나누는 것을 의미하는 청킹은 자연어 처리에서 명사구와 같은 짧은 구절과 품사를 식별하는 중요한 프로세스 중 하나입니다. 청킹은 토큰에 레이블을 지정하는 것입니다. 청킹 프로세스의 도움으로 문장의 구조를 얻을 수 있습니다.

이 예제에서는 NLTK Python 모듈을 사용하여 Noun-Phrase 청킹을 구현합니다. NP 청킹은 문장에서 명사구 청크를 찾는 청킹의 범주입니다.

명사구 청킹 구현 단계

명사구 청킹을 구현하려면 아래 단계를 따라야합니다.

1 단계-청크 문법 정의

첫 번째 단계에서는 청킹을위한 문법을 ​​정의합니다. 그것은 우리가 따라야 할 규칙들로 구성 될 것입니다.

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) 모델 텍스트 추출 및 숫자 형식으로 변환

자연어 처리에 유용한 모델 인 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에서 Bag of Words 모델 구축

NLTK에서 BoW 모델을 빌드 할 다음 Python 스크립트를 살펴 보겠습니다.

먼저 다음 패키지를 가져옵니다.

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) − 선형 대수를 기반으로하며 문서 용어 행렬에 SVD (Singular Value Decomposition) 개념을 사용합니다.

Non-Negative Matrix Factorization (NMF) − 또한 LDA와 마찬가지로 선형 대수를 기반으로합니다.

위에서 언급 한 알고리즘은 다음 요소를 갖습니다.

  • 주제 수 : 매개 변수
  • 문서-단어 매트릭스 : 입력
  • WTM (Word Topic Matrix) 및 TDM (Topic Document Matrix) : 출력