TEXT 문서 키워드 추출

서건우의 이미지

텍스트 내에 키워드를 검색해 내는 걸 만들려고 합니다.

만개 정도의 키워드가 존재합니다.

TXT를 INPUT을 넣어서 만개 키워드 중에 매칭 하는 키워드를 뽑아 낼려고 합니다.

어떤 키워드가 존재하는 지 찾아내기만 하면 됩니다. 위치정보 등 필요없어요.

TXT를 읽어가면서 처리를 해야 할 듯 한 데 어떤식으로 구현하는게 좋을까요?

오토마타를 이용한 방안이 있긴 하던데요..자료 찾기가 쉽지 않네요.

단순이 만개의 키워드를 무식하게 LOOP 돌면서 확인 할 수는 있는데 속도가 좀 걸리네요..

yunC의 이미지

저두 잘 모르지만 만약 만개의 키워드를 가진 테이블이 정렬되었다면 이진탐색이 좋을 듯 싶네요
ㄷㄷㄷ

simminjo의 이미지

간단한걸 찾으신다면 KMP알고리즘은 어떨까요? 단순 루프보다는 훨씬 빠를텐데요
^^

---------------------------------------------------------------
Opensource에 기여하는 것이 꿈입니다.
내가 만든 코드를 모두가 사용할 때 까지~

아메스트리에우려먹은사골맹탕의 이미지

DB a, b;
a join b;

이상으로 압축할 수 있겠군요. DB 엔진 알고리즘을 살펴보시는 게...

우선 메모리에 데이터들을 올리고 분류하는데,
비교를 할 때 가능한한 양측 다 후보군을 줄여줘야겠죠.

..근데 이건 복잡하게 생각할 건덕지도 안 보이네요..;
소팅 후 bi-시퀀셜 서치니까요.

sozu의 이미지

stl::set을 쓰시면 쉽고 빠르게 구현하실수 있습니다.

만개면 최악의 경우 14번의 검사면 가능합니다.

-----------
http://sozu.tistory.com

-----------
청하가 제안하는 소프트웨어 엔지니어로써 재미있게 사는 법
http://sozu.tistory.com

lacovnk의 이미지

stl:set을 써보진 않았지만, set을 써서 어떻게 14번만 검사하나요?
여전히 만개의 아이템을 서치하는 것이 아니라 텍스트를 만번 봐야하는 것 아닌가요? 대신 set에서 찾는 비용이 O(1)인 것 같은데요.

sozu의 이미지

텍스트 안에 키워드가 있는지를 찾는 것이었네요;; 죄송합니다.

전 거꾸로 생각했습니다.

그리고 14번은.. set이 balanced binary search tree 이기 때문에 만개의 아이템이면 최악의 경우 14번만의 비교(O(log2N))만으로 찾을수 있다는 것이었습니다.

물론 호출은 한번만 하겠죠...^^

텍스트 안에서 키워드를 찾는 것은 일단 모든 키워드는 돌려봐야 할것 이구요 (이 루프를 OpenMP를 이용하여 병렬로 처리해도 되겠죠..멀티코어라면..)

텍스트안에서 키워드를 찾는 로직을 빠르게 하시면 될것 같습니다.

제가 예전에 사용했던 방법은 Boyer–Moore string search algorithm 입니다.

http://en.wikipedia.org/wiki/Boyer%E2%80%93Moore_string_search_algorithm

상당히 빨랐습니다.^^

-----------
http://sozu.tistory.com

-----------
청하가 제안하는 소프트웨어 엔지니어로써 재미있게 사는 법
http://sozu.tistory.com

lacovnk의 이미지

텍스트가 너무 길다면 한번에 읽어서 처리할 수 있는 알고리즘도 한번 고려해보세요
multiple string pattern matching 알고리즘이 좀 있을겁니다.
초기 데이터구조 생성하는데 비용이 들어갈텐데, 만개면 꽤 될테니.. 어느 쪽이 나을지는 모르겠네요.

테스트 해보기 전에 complexity 한번 보시고 판단하시고요.
예를 들어 single string pattern matching 의 하나인 KMP는 O(원본길이+키워드길이) 로 가장 나은 복잡도를 갖고 있습니다.

익명 사용자의 이미지

안녕하세요.
블로그 운영하실때 키워드가 필요하시면 한번 들려 주세요~ 무료로 키워드를 제공해 드립니다.
http://seokor.com/

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.