2017-11-23 12 views
2

저는 NLP 및 IR 프로그램을 처음 사용합니다. 깊은 NLP 파이프 라인, 즉 Lemmatizing, Dependency Parsing 기능을 문장 인덱싱에 추가하려고합니다. 다음은 내 스키마 및 검색 자입니다.Whoosh가 포함 된 Deep NLP 파이프 라인

my_analyzer = RegexTokenizer()| StopFilter()| LowercaseFilter() | StemFilter() | Lemmatizer() 
    pos_analyser = RegexTokenizer() | StopFilter()| LowercaseFilter() | PosTagger() 
    schema = Schema(id=ID(stored=True, unique=True), stem_text=TEXT(stored= True, analyzer=my_analyzer), pos_tag= pos_analyser) 

for sentence in sent_tokenize_list1: 
    writer.add_document(stem_text = sentence, pos_tag = sentence) 
for sentence in sent_tokenize_list2: 
    writer.add_document(stem_text = sentence, pos_tag = sentence) 
writer.commit() 
with ix.searcher() as searcher: 
    og = qparser.OrGroup.factory(0.9) 
    query_text = MultifieldParser(["stem_text","pos_tag"], schema = ix.schema, group= og).parse(
     "who is controlling the threat of locusts?") 
    results = searcher.search(query_text, sortedby= scores, limit = 10) 

이것은 맞춤 분석기입니다.

class PosTagger(Filter): 
    def __eq__(self, other): 
     return (other 
       and self.__class__ is other.__class__ 
       and self.__dict__ == other.__dict__) 

    def __ne__(self, other): 
     return not self == other 

    def __init__(self): 
     self.cache = {} 

    def __call__(self, tokens): 
     assert hasattr(tokens, "__iter__") 
     words = [] 
     tokens1, tokens2 = itertools.tee(tokens) 
     for t in tokens1: 
      words.append(t.text) 
     tags = pos_tag(words) 
     i=0 
     for t in tokens2: 
      t.text = tags[i][0] + " "+ tags[i][1] 
      i += 1 
      yield t 

다음과 같은 오류가 발생합니다.

내가 잘못하고 있니? 이것은 검색 엔진에 NLP 파이프 라인을 추가하는 적절한 방법입니까?

답변

4

pos_tagpos_analyser이 아닌 TEXT(stored= True, analyzer=pos_analyzer) 필드에 직접 지정해야합니다.

그래서 schema에서, 당신은해야합니다

schema = Schema(id=ID(stored=True, unique=True), stem_text=TEXT(stored= True, analyzer=my_analyzer), post_tag=TEXT(stored= True, analyzer=pos_analyzer))