티스토리 뷰
Keybert와 kiwi형태소분석기를 사용하여 키워드추출 하기
블로그를 참고한 것으로 거의 동일한 내용이니, 위 블로그를 봐주시면 더 자세한 설명을 볼 수 있습니다.
설치
pip install keybert
pip install kiwipiepy
pip install transformers
모델 불러오기
from keybert import KeyBERT
from kiwipiepy import Kiwi
from transformers import BertModel
model = BertModel.from_pretrained('skt/kobert-base-v1')
kw_model = KeyBERT(model)
kobert의 모델을 사용함
텍스트 전처리
약 800-1000자 정도의 텍스트를 기준으로 함
kiwi 형태소에서 명사만 추출하기 위해 "NN"으로 시작하는 것만 추출함
nouns 리스트에 저장하여 추출이 끝나면 하나의 문자열로 return함
text = """서울 지진 대피소에 대한 데이터 분석을 위해서는 어떤 종류의 데이터가 필요할까요? 예를 들어, 서울시의 지진 대피소 위치, 수용 가능 인원, 대피소 내부 시설물, 대피소 이용 현황 등의 정보가 필요할 것입니다.
지진 대피소 위치 분석 예시: 지진 대피소 위치는 서울시 공공데이터 포털에서 제공하는 "서울시 지진대피소 안내" 데이터를 사용할 수 있습니다. 이 데이터셋에는 지진 대피소 명칭, 위치(주소), 좌표, 수용 인원, 관리 기관 등의 항목이 포함되어 있습니다.
이를 바탕으로 대피소 위치를 지도에 시각화하여 지진 발생 시 대피소가 필요한 지역을 파악할 수 있습니다. 대피소 이용 현황 분석 예시: 대피소 이용 현황은 서울시에서 제공하는 "서울시 재난정보 실시간 수집 및 제공 서비스" 데이터를 사용할 수 있습니다.
이 데이터셋에는 대피소 이용 현황(대피소 이용 가능 여부, 이용 중인 인원 수), 지진 발생 시 대피소 이용 현황 등의 정보가 포함되어 있습니다. 이를 바탕으로 대피소 이용 현황을 분석하여 인원이 많은 대피소를 파악하거나, 대피소 이용 가능 여부 등을 파악할 수 있습니다."""
kiwi = Kiwi()
result_text = ''
for sentence in kiwi.analyze(text):
nouns = []
for token in sentence[0]:
if token.tag.startswith('NN'):
nouns.append(token.form)
if nouns:
result_text = ' '.join(nouns)
print(result_text)
result_text의 결과
'서울 지진 대피소 데이터 분석 종류 데이터 필요 예 서울시 지진 대피소 위치 수용 가능 인원 대피소 내부 시설물 대피소 이용 현황 등 정보 필요 것 지진 대피소 위치 분석 예시 지진 대피소 위치 서울시 공공 데이터 포털 제공 서울시 지진 대피소 안내 데이터 사용 수 데이터 지진 대피소 명칭 위치 주소 좌표 수용 인원 관리 기관 등 항목 포함 바탕 대피소 위치 지도 시각 지진 발생 시 대피소 필요 지역 파악 수 대피소 이용 현황 분석 예시 대피소 이용 현황 서울시 제공 서울시 재난 정보 실시간 수집 제공 서비스 데이터 사용 수 데이터 대피소 이용 현황 대피소 이용 가능 여부 이용 중 인원 수 지진 발생 시 대피소 이용 현황 등 정보 포함 바탕 대피소 이용 현황 분석 인원 대피소 파악 대피소 이용 가능 여부 등 파악 수'
키워드를 추출하는 게 목표라서, 문장 자체를 명사로만 이루어지게 하는 것이 더 깔끔함
키워드 추출
keywords = kw_model.extract_keywords(result_text, keyphrase_ngram_range=(1, 1), stop_words=None, top_n=20)
keywords
>>[('데이터', 0.4451),
('지진', 0.4023),
('서울', 0.3941),
('정보', 0.3515),
('서울시', 0.3509),
('지도', 0.3341),
('분석', 0.3061),
('재난', 0.245),
('시설물', 0.2277),
('지역', 0.2274),
('공공', 0.2011),
('포털', 0.1774),
('사용', 0.1751),
('이용', 0.171),
('위치', 0.1682),
('기관', 0.1638),
('수집', 0.1616),
('실시간', 0.1505),
('발생', 0.1442),
('주소', 0.1425)]
비지도 학습으로 하고 싶어서 이전 게시물들은 TextRank기법을 사용한 라이브러리를 테스트함
그 중에는 KR-wordrank가 가장 괜찮았고, 간단히 사용할 수 있는 언어모델은 keyBert를 테스트함
둘 중에 비교를 하자면,,,,사실 엄청 차이가 크진 않지만 keyBert가 더 좋은 것 같다.
이정도면 지금 수준에서는 만족~
코드 합본
from keybert import KeyBERT
from kiwipiepy import Kiwi
from transformers import BertModel
model = BertModel.from_pretrained('skt/kobert-base-v1')
kw_model = KeyBERT(model)
text = """서울 지진 대피소에 대한 데이터 분석을 위해서는 어떤 종류의 데이터가 필요할까요? 예를 들어, 서울시의 지진 대피소 위치, 수용 가능 인원, 대피소 내부 시설물, 대피소 이용 현황 등의 정보가 필요할 것입니다. 지진 대피소 위치 분석 예시: 지진 대피소 위치는 서울시 공공데이터 포털에서 제공하는 "서울시 지진대피소 안내" 데이터를 사용할 수 있습니다. 이 데이터셋에는 지진 대피소 명칭, 위치(주소), 좌표, 수용 인원, 관리 기관 등의 항목이 포함되어 있습니다. 이를 바탕으로 대피소 위치를 지도에 시각화하여 지진 발생 시 대피소가 필요한 지역을 파악할 수 있습니다. 대피소 이용 현황 분석 예시: 대피소 이용 현황은 서울시에서 제공하는 "서울시 재난정보 실시간 수집 및 제공 서비스" 데이터를 사용할 수 있습니다. 이 데이터셋에는 대피소 이용 현황(대피소 이용 가능 여부, 이용 중인 인원 수), 지진 발생 시 대피소 이용 현황 등의 정보가 포함되어 있습니다. 이를 바탕으로 대피소 이용 현황을 분석하여 인원이 많은 대피소를 파악하거나, 대피소 이용 가능 여부 등을 파악할 수 있습니다."""
kiwi = Kiwi()
nouns_list = []
for sentence in kiwi.analyze(test2):
nouns = [token.form for token in sentence[0] if token.tag.startswith('NN')]
if nouns:
nouns_list.extend(nouns)
result_text = ' '.join(nouns_list)
keywords = kw_model.extract_keywords(result_text, keyphrase_ngram_range=(1, 1), stop_words=None, top_n=20)
print(keywords)
Github 코드
https://github.com/shinysong/korean-keyword-extract/blob/main/Keybert.ipynb
반응형
'개발일지' 카테고리의 다른 글
[postgreSQL] 원격 서버(Ubuntu)와 pgAdmin4 연결하고 접속하기 (0) | 2023.09.14 |
---|---|
[Elasticsearch] 검색 쿼리 단어 중 특정 단어에 가중치 - multi_match, match, should (1) | 2023.05.01 |
[TextRank] KR-WordRank 한국어 키워드 추출 (0) | 2023.04.27 |
[TextRank] textrankr과 konlpy를 사용한 한국어 요약 (0) | 2023.04.27 |
[TextRank] pytextrank와 spacy 한글 키워드 추출 (0) | 2023.04.27 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- MongoDB
- polars
- hadoop
- python
- pandas
- SPARQL
- 지식그래프임베딩
- PEFT
- elasticsesarch
- difflib
- v-tooltip
- knowledgegraph
- python'
- volar
- 3d-force-graph
- Postgis
- p-tuing
- psycopg
- 지식그래프
- Encoding
- rdflib
- knowlegegraph
- vscode
- writerow
- PostgreSQL
- 키워드추출
- KRworkrank
- Vue3
- LLM
- TextRank
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함