Main Content

RAKE를 사용하여 텍스트 데이터에서 키워드 추출하기

이 예제는 RAKE(Rapid Automatic Keyword Extraction)를 사용하여 텍스트 데이터에서 키워드를 추출하는 방법을 보여줍니다.

RAKE 알고리즘은 구분자에 기반한 방식으로 후보 키워드를 식별하여 키워드를 추출하고, 후보 키워드에 나타나는 단어의 동시발생을 사용하여 점수를 매깁니다. 키워드에는 토큰이 여러 개 있을 수 있습니다. 뿐만 아니라 RAKE 알고리즘은 동일한 병합 구분자로 구분된 키워드가 연속하여 나오는 경우 이들 키워드를 병합합니다.

키워드 추출하기

텍스트 데이터를 포함하는 토큰화된 문서로 구성된 배열을 만듭니다.

textData = [
    "MATLAB provides tools for scientists and engineers. MATLAB is used by scientists and engineers."
    "Analyze text and images. You can import text and images."
    "Analyze text and images. Analyze text, images, and videos in MATLAB."];
documents = tokenizedDocument(textData);

rakeKeywords 함수를 사용하여 키워드를 추출합니다.

tbl = rakeKeywords(documents)
tbl=12×3 table
                     Keyword                     DocumentNumber    Score
    _________________________________________    ______________    _____

    "MATLAB"        "provides"    "tools"              1             8  
    "MATLAB"        ""            ""                   1             2  
    "scientists"    "and"         "engineers"          1             2  
    "scientists"    ""            ""                   1             1  
    "engineers"     ""            ""                   1             1  
    "Analyze"       "text"        ""                   2             4  
    "import"        "text"        ""                   2             4  
    "images"        ""            ""                   2             1  
    "Analyze"       "text"        ""                   3             4  
    "images"        ""            ""                   3             1  
    "videos"        ""            ""                   3             1  
    "MATLAB"        ""            ""                   3             1  

한 키워드에 단어가 여러 개 있는 경우 string형 배열의 i번째 요소는 키워드의 i번째 단어에 대응합니다. 이 키워드의 단어 수가 가장 긴 키워드보다 적으면 string형 배열의 나머지 요소는 빈 문자열 ""입니다.

가독성을 위해 join 함수와 strip 함수를 사용하여 여러 단어로 된 키워드를 단일 문자열로 변환합니다.

if size(tbl.Keyword,2) > 1
    tbl.Keyword = strip(join(tbl.Keyword));
end
head(tbl)
             Keyword              DocumentNumber    Score
    __________________________    ______________    _____

    "MATLAB provides tools"             1             8  
    "MATLAB"                            1             2  
    "scientists and engineers"          1             2  
    "scientists"                        1             1  
    "engineers"                         1             1  
    "Analyze text"                      2             4  
    "import text"                       2             4  
    "images"                            2             1  

문서당 최대 키워드 수 지정하기

rakeKeywords 함수는 기본적으로 식별된 모든 키워드를 반환합니다. 키워드 수를 줄이려면 'MaxNumKeywords' 옵션을 사용하십시오.

'MaxNumKeywords' 옵션을 3으로 설정하여 각 문서마다 상위 3개의 키워드를 추출합니다.

tbl = rakeKeywords(documents,'MaxNumKeywords',3)
tbl=9×3 table
                     Keyword                     DocumentNumber    Score
    _________________________________________    ______________    _____

    "MATLAB"        "provides"    "tools"              1             8  
    "MATLAB"        ""            ""                   1             2  
    "scientists"    "and"         "engineers"          1             2  
    "Analyze"       "text"        ""                   2             4  
    "import"        "text"        ""                   2             4  
    "images"        ""            ""                   2             1  
    "Analyze"       "text"        ""                   3             4  
    "images"        ""            ""                   3             1  
    "videos"        ""            ""                   3             1  

구분자 지정하기

위의 추출된 키워드에서, 함수는 첫 번째 문서에서 여러 단어로 된 키워드 "scientists and engineers"를 추출하지만, 두 번째 문서에서 여러 단어로 된 키워드 "text and images"를 추출하지는 않습니다. 왜냐하면 RAKE 알고리즘은 구분자 사이에 나타나는 토큰을 후보 키워드로 사용하고 병합된 구문이 여러 번 나타날 때만 구분자와 키워드를 병합하기 때문입니다.

이 경우에는 토큰 "text"의 인스턴스가 "Analyze text"과 "import text"라는 두 개의 서로 다른, 여러 단어로 된 키워드 후보 내에 나타납니다. 이 경우에는 함수가 "text"를 별도의 후보 키워드로 추출하지 않기 때문에, 알고리즘은 구분자 "and"와 후보 키워드 "images"의 후보 병합을 고려하지 않습니다.

'Delimiters' 옵션과 'MergingDelimiters' 옵션을 사용하여 키워드를 추출하는 데 사용되는 구분자를 지정할 수 있습니다. 추출된 키워드에 표시되지 않아야 하는 구분자를 지정하려면 'Delimiters' 옵션을 사용합니다. 추출된 키워드에 표시될 수 있는 구분자를 지정하려면 'MergingDelimiters' 옵션을 사용합니다.

이전과 동일한 텍스트에서 키워드를 추출하고 단어 "Analyze"와 "import"도 병합 구분자로 지정합니다.

newDelimiters = ["Analyze" "import"];
mergingDelimiters = [stopWords newDelimiters];

tbl = rakeKeywords(documents,'MergingDelimiters', mergingDelimiters)
tbl=12×3 table
                     Keyword                     DocumentNumber    Score
    _________________________________________    ______________    _____

    "MATLAB"        "provides"    "tools"              1             8  
    "MATLAB"        ""            ""                   1             2  
    "scientists"    "and"         "engineers"          1             2  
    "scientists"    ""            ""                   1             1  
    "engineers"     ""            ""                   1             1  
    "text"          "and"         "images"             2             2  
    "text"          ""            ""                   2             1  
    "images"        ""            ""                   2             1  
    "text"          ""            ""                   3             1  
    "images"        ""            ""                   3             1  
    "videos"        ""            ""                   3             1  
    "MATLAB"        ""            ""                   3             1  

여기에서 함수는 토큰 "text"와 "images"를 키워드로 처리하고 병합된 키워드 "text and images"도 추출합니다. RAKE 알고리즘에 대한 자세한 내용은 Rapid Automatic Keyword Extraction 항목을 참조하십시오.

대안

다양한 키워드 추출 알고리즘을 실험하여 데이터에 가장 적합한 알고리즘을 확인할 수 있습니다. RAKE 알고리즘은 구분자에 기반한 방식을 사용하여 후보 키워드를 추출하기 때문에 추출된 키워드가 매우 길 수 있습니다. 또는 TextRank 알고리즘을 사용하여 키워드 추출을 시도할 수도 있습니다. TextRank 알고리즘은 개별 토큰을 후보 키워드로 시작한 다음 적합한 경우 해당 토큰을 병합합니다. TextRank를 사용하여 키워드를 추출하려면 textrankKeywords 함수를 사용합니다. 자세한 내용은 TextRank를 사용하여 텍스트 데이터에서 키워드 추출하기 항목을 참조하십시오.

참고 문헌

[1] Rose, Stuart, Dave Engel, Nick Cramer, and Wendy Cowley. "Automatic keyword extraction from individual documents." Text mining: applications and theory 1 (2010): 1-20.

참고 항목

| | |

관련 항목