필자는 파이썬에서 텍스트 문장/단락 목록에서 명명 된 엔티티 (NLTK 사용)를 제거하는 몇 가지 사용자 정의 함수를 작성했습니다. 내가 가지고있는 문제는 나의 방법이 매우 느리다는 것이다. 특히 많은 양의 데이터에 대해. 누구든지 더 빨리 달릴 수 있도록 최적화하는 방법에 대한 제안이 있습니까? NLTK를 사용한 빠른 명명 된 엔티티 제거
import nltk
import string
# Function to reverse tokenization
def untokenize(tokens):
return("".join([" "+i if not i.startswith("'") and i not in string.punctuation else i for i in tokens]).strip())
# Remove named entities
def ne_removal(text):
tokens = nltk.word_tokenize(text)
chunked = nltk.ne_chunk(nltk.pos_tag(tokens))
tokens = [leaf[0] for leaf in chunked if type(leaf) != nltk.Tree]
return(untokenize(tokens))
내가 일반적으로 텍스트 목록이 코드를 사용하고 지능형리스트를 통해
ne_removal
함수를 호출합니다. 아래 예 :
text_list = ["Bob Smith went to the store.", "Jane Doe is my friend."]
named_entities_removed = [ne_removal(text) for text in text_list]
print(named_entities_removed)
## OUT: ['went to the store.', 'is my friend.']
업데이트 :이 코드를 사용하여 배치 버전으로 전환하려고 시도했지만 약간 빠릅니다. 계속 탐구 할 것입니다. 지금까지 의견을 보내 주셔서 감사합니다.
는def extract_nonentities(tree):
tokens = [leaf[0] for leaf in tree if type(leaf) != nltk.Tree]
return(untokenize(tokens))
def fast_ne_removal(text_list):
token_list = [nltk.word_tokenize(text) for text in text_list]
tagged = nltk.pos_tag_sents(token_list)
chunked = nltk.ne_chunk_sents(tagged)
non_entities = []
for tree in chunked:
non_entities.append(extract_nonentities(tree))
return(non_entities)
codereview 로의 마이그레이션이 적절한 지 잘 모르겠습니다. 지나치게 느린 코드 _ 문제는 "코드를 더 잘 구조 할 수 있습니까?"가 아닙니다. – alexis