2010-05-13 2 views
10

여기에서 질문을 할 때 도구는 질문의 첫 번째 작은 부분에서 자동 검색에서 반환 된 질문에 대한 팁을 제공하지만 괜찮은 비율은 텍스트를 제공하지 않습니다 그것은 제목보다 질문을 이해하는데 더 유용합니다. 쓸모없는 질문을 잘라 내기 위해 필터를 만드는 방법에 대해 누구나 알고 있습니까?문서가 있으면 관련 스 니펫을 선택하십시오

내 첫 번째 아이디어는 일부 목록에서만 단어만을 포함하는 선행 문장 (예 : 단어 중지, 제목의 단어 및 SO 코퍼스의 태그와의 상관 관계가 매우 약한 단어, 즉)에 관계없이의 태그의 질문에 발생할 확률이 동일

+0

가능한 중복 항목 : ** [C# 검색 결과 표시 관련 관련 문서 스 니펫 찾기] (http : // stackoverflow.com/questions/282002) ** – hippietrail

답변

16

자동 텍스트 축약 절은 automatic text summarization에 관심이있는 것 같습니다

. 문제의 개요, 관련 문제 및 사용 가능한 알고리즘에 대해서는 Das 및 Martin의 논문 A Survey on Automatic Text Summarization (2007)을 살펴보십시오.

간단한 알고리즘

간단하지만 상당히 효과적인 요약 알고리즘은 즉, 가장 빈번한 사람이 stop list 단어를 포함하지 않는 가장 빈번한 콘텐츠 단어가 포함 된 원본 텍스트 (에서 문장의 제한된 수를 선택하는 것입니다).

Summarizer(originalText, maxSummarySize): 
    // start with the raw freqs, e.g. [(10,'the'), (3,'language'), (8,'code')...] 
    wordFrequences = getWordCounts(originalText) 
    // filter, e.g. [(3, 'language'), (8, 'code')...] 
    contentWordFrequences = filtStopWords(wordFrequences) 
    // sort by freq & drop counts, e.g. ['code', 'language'...] 
    contentWordsSortbyFreq = sortByFreqThenDropFreq(contentWordFrequences) 

    // Split Sentences 
    sentences = getSentences(originalText) 

    // Select up to maxSummarySize sentences 
    setSummarySentences = {} 
    foreach word in contentWordsSortbyFreq: 
     firstMatchingSentence = search(sentences, word) 
     setSummarySentences.add(firstMatchingSentence) 
     if setSummarySentences.size() = maxSummarySize: 
     break 

    // construct summary out of select sentences, preserving original ordering 
    summary = "" 
    foreach sentence in sentences: 
    if sentence in setSummarySentences: 
     summary = summary + " " + sentence 

    return summary 

이 알고리즘을 사용하여 요약을 일부 오픈 소스 패키지

은 다음과 같습니다

Classifier4J (자바)

자바를 사용하는 경우, 당신은 Classifier4J의 모듈 SimpleSummarizer를 사용할 수 있습니다.

Classifier4J 텍스트 작업을위한 자바 패키지입니다 : 예를 사용

이의 원래 텍스트가 있다고 가정하자 here을 발견했다. Classifier4J는 summariser를 포함합니다. Summariser는 텍스트 요약을 허용합니다. Summariser 정말 멋지 네요. 나는 다른 java summarisers가 있다고 생각하지 않는다. 다음 코드에서 볼 수 있듯이

, 당신은 쉽게 간단한 한 문장으로 요약 만들 수 있습니다 위의 알고리즘을 사용하여

// Request a 1 sentence summary 
String summary = summariser.summarise(longOriginalText, 1); 

을,이 Classifier4J includes a summariser.를 생성합니다.

NClassifier (C#을)

당신은 C#을 사용하는 경우, C 번호에 Classifier4J의 포트가있다라는 NClassifier

NLTK에 대한 트리스탄 Havelick의 요약 자 (파이썬)

거기 work-in-progress Python의 Natural Language Toolkit (NLTK)here을 사용할 수있는 Classifier4J 요약 자의 Python 포트.

+0

C# 버전이이 사이트에서 사용하기에 충분히 빠르지는 모르겠습니다. – BCS

+0

알고리즘은 ** dead simple **이므로 충분히 빠릅니다. 먼저 원본 텍스트에서 ** 가장 자주 나오는 내용 단어 **를 결정합니다. 그런 다음 반복하여 각 단어가 들어있는 원래 문자열에서 ** 가장 빠른 문장 **을 선택합니다. 원하는 문장 수 N 개의 많은 문장이 선택 될 때까지이 작업이 계속됩니다. – dmcer

+0

나는 최근에이 알고리즘을 사용했고 C#으로 구현하기가 정말 쉽다고 믿고 좋은 결과를 얻는다. 빈 공간을 없애거나 키 공간을 반환하는 것과 같은 몇 가지 설정으로 여기 저기에 놀 필요가있었습니다. 몇 번 시도합니다. 고맙습니다. –

관련 문제