>

작은 샘플 텍스트를 구분자가없고 각 문장 끝에 공백이없는 문장 목록으로 분할하려고합니다.

샘플 텍스트 :

두 번째 르네상스가 처음 보이면 지루해 보일 수 있습니다. 적어도 두 번보고 확실히 2 부를보십시오. 그러면 행렬에 대한 시야가 달라집니다. 인류는 전쟁을 시작한 사람들입니까? AI가 나쁜 것입니까?

이것으로 (원하는 출력) :

['The first time you see The Second Renaissance it may look boring', 'Look at it at least twice and definitely watch part 2', 'It will change your view of the matrix', 'Are the human people the ones who started the war', 'Is AI a bad thing']

내 코드는 현재 :

def sent_tokenize(text):
    sentences = re.split(r"[.!?]", text)
    sentences = [sent.strip(" ") for sent in sentences]
    return sentences

그러나이 출력 (현재 출력) :

['The first time you see The Second Renaissance it may look boring', 'Look at it at least twice and definitely watch part 2', 'It will change your view of the matrix', 'Are the human people the ones who started the war', 'Is AI a bad thing', '']

끝에 여분의 ''을 통지하십시오.

현재 출력이 끝날 때 추가 항목을 제거하는 방법에 대한 아이디어가 있습니까?


  • 답변 # 1

    와이즈 비즈

    이 작업을 수행하면 제거 할 수 있습니다 :

    Any ideas on how to remove the extra '' at the end of my current output?

    또는 더 빠름 (ᴄᴏʟᴅsᴘᴇᴇᴅ)

    sentences[:-1]
    
    

    출력 :

    del result[-1]
    
    

  • 답변 # 2

    ['The first time you see The Second Renaissance it may look boring', 'Look at it at least twice and definitely watch part 2', 'It will change your view of the matrix', 'Are the human people the ones who started the war', 'Is AI a bad thing'] nltk

    NLP 사업을하고 있다면 sent_tokenize 를 강력히 추천합니다   sent_tokenize 에서  패키지.

    nltk
    
    

    정규식보다 훨씬 강력하고 작업을 수행 할 수있는 많은 옵션을 제공합니다. 자세한 정보는 공식 문서를 참조하십시오.

    후행 구분 기호가 까다 롭다면 >>> from nltk.tokenize import sent_tokenize >>> sent_tokenize(text) [ 'The first time you see The Second Renaissance it may look boring.', 'Look at it at least twice and definitely watch part 2.', 'It will change your view of the matrix.', 'Are the human people the ones who started the war?', 'Is AI a bad thing?' ] 를 사용할 수 있습니다.  약간 다른 패턴으로 :

    nltk.tokenize.RegexpTokenizer
    
    
    <시간> 정규 기반 >>> from nltk.tokenize import RegexpTokenizer >>> tokenizer = RegexpTokenizer(r'[^.?!]+') >>> list(map(str.strip, tokenizer.tokenize(text))) [ 'The first time you see The Second Renaissance it may look boring', 'Look at it at least twice and definitely watch part 2', 'It will change your view of the matrix', 'Are the human people the ones who started the war', 'Is AI a bad thing' ]

    만약필요하다면 re.split 를 사용하십시오 그런 다음 제외 미리보기를 추가하여 패턴을 수정해야합니다-

    regex
    
    

    추가 된 >>> list(map(str.strip, re.split(r"[.!?](?!$)", text))) [ 'The first time you see The Second Renaissance it may look boring', 'Look at it at least twice and definitely watch part 2', 'It will change your view of the matrix', 'Are the human people the ones who started the war', 'Is AI a bad thing?' ]  줄 끝에 아직 도달하지 않은 경우에만 분할하도록 지정합니다. 불행히도, 나는 마지막 문장의 후행 구분 기호가 (?!$) 와 같은 것을하지 않고 합리적으로 제거 될 수 있는지 확실하지 않습니다. .

  • 답변 # 3

    필터를 사용하여 빈 요소를 제거 할 수 있습니다

    예 :

    result[-1] = result[-1][:-1]
    
    

  • 답변 # 4

    import re text = """The first time you see The Second Renaissance it may look boring. Look at it at least twice and definitely watch part 2. It will change your view of the matrix. Are the human people the ones who started the war? Is AI a bad thing?""" def sent_tokenize(text): sentences = re.split(r"[.!?]", text) sentences = [sent.strip(" ") for sent in sentences] return filter(None, sentences) print sent_tokenize(text)  단락을 나누기 전에 먼저 단락을 만들거나 결과에서 빈 문자열을 필터링하십시오.

    strip

관련 자료

  • 이전 angular - angular5에서 innerHtml을 통해 구성 요소로드
  • 다음 css3 - position - fixed의 ios 모바일 브라우저 스크롤 문제, 스크롤이 끝나면 페이지가 맨 위로 이동