갈루아의 반서재

NLTK (2) - 텍스트 문장으로 분해하기 Tokenizing text into sentences


설치가 제대로 되었는지 간단한 코드로 확인해보자. 

para = "Hello World. It's good to see you. Thanks for buying this book."
from nltk.tokenize import sent_tokenize
sent_tokenize(para)
['Hello World.', "It's good to see you.", 'Thanks for buying this book.']

sentence tokenization 함수를 호출해서 para를 인수로 사용한다.  sent_tokenize 함수는 nltk.tokenize.punkt 모듈의 PunktSentenceTokenizer 인스턴스를 사용해서 문장의 시작과 끝을 구분한다. 이미 다수의 유럽 언어에서 검증이 되었다.

sent_tokenize() 에 사용된 인스턴스는 사실 pickle 파일의 요청에 의해 로딩된다. 그러므로 다수의 문장을 분해할려면 PunktSentenceTokenizer 클래스를 한 번 로딩해서 tokenzie() 메소드를 호출하는게 더 효율적이다. 

para = "Hello World. It's good to see you. Thanks for buying this book."
import nltk.data
tokenizer = nltk.data.load('tokenizers/punkt/PY3/english.pickle')
tokenizer.tokenize(para)
['Hello World.', "It's good to see you.", 'Thanks for buying this book.']

spanish.pickle 파일을 통해 스페인어를 분해해보자.

spanish_para = "Hola amigo. Estoy bien."
spanish_tokenizer = nltk.data.load('tokenizers/punkt/PY3/spanish.pickle')
spanish_tokenizer.tokenize(spanish_para)
['Hola amigo.', 'Estoy bien.']


spanish_para = "Entre ellas, destaca el crecimiento experimentado en la demanda de formación en áreas relacionadas con la digitalización y las tecnologías de la comunicación. En cuanto al número de participantes, mantienen el liderazgo los cursos sobre asuntos relacionados con el comercio y el marketing. Además, la modalidad de formación online será la más utilizada para el acceso a los distintos certificados de profesionalidad y a las especialidades formativas que forman el catálogo de cursos ofertados.Para la valoración de los planes presentados, se han considerado colectivos prioritarios en el acceso a dichos cursos los trabajadores temporales y a tiempo parcial; las mujeres trabajadoras; los trabajadores mayores de 45 años, y los desempleados de larga duración, dentro de su porcentaje de reserva. Por su parte, los trabajadores autónomos y los de la Economía Social dispondrán de acciones formativas valoradas en 6 y 4,5 millones de euros, respectivamente."
spanish_tokenizer = nltk.data.load('tokenizers/punkt/PY3/spanish.pickle')
spanish_tokenizer.tokenize(spanish_para)

['Entre ellas, destaca el crecimiento experimentado en la demanda de formación en áreas relacionadas con la digitalización y las tecnologías de la comunicación.', 'En cuanto al número de participantes, mantienen el liderazgo los cursos sobre asuntos relacionados con el comercio y el marketing.', 'Además, la modalidad de formación online será la más utilizada para el acceso a los distintos certificados de profesionalidad y a las especialidades formativas que forman el catálogo de cursos ofertados.Para la valoración de los planes presentados, se han considerado colectivos prioritarios en el acceso a dichos cursos los trabajadores temporales y a tiempo parcial; las mujeres trabajadoras; los trabajadores mayores de 45 años, y los desempleados de larga duración, dentro de su porcentaje de reserva.', 'Por su parte, los trabajadores autónomos y los de la Economía Social dispondrán de acciones formativas valoradas en 6 y 4,5 millones de euros, respectivamente.']


이외에 사용가능한 분해기는 다음에서 확인할 수 있다. 

1
2
root@localhost:~# find / -name 'tokenizers' -type d
/root/nltk_data/tokenizers
cs