사전 c로 만들어볼려구 합니다. key sort에대해서궁금한점이 있

nidle의 이미지

안녕하십니까 사전을 c로 만들어 볼려고합니다.
그런데 조금 고민이 되는군요 우선 제생각은
입력된단어를 비교하는점에서 사전 txt를 만들어서 단어와 뜻을 써넣습니다
그리고 key sort 를해서 바이너리 써치를 통해서 찾는거죠
근데 문제는 하드디스크(txt파일)에 있는 단어뜻(record)과 key부분을 어떻게 연결해야
하는 부분에서 잘 모르겠습니다..

어떤분들은 해싱을 하라고 하시는데
사실 해싱이 먼지도 잘모르겠어서,, 그부분은 좀더 공부해서 할려구요,
그럼이만...

see2002의 이미지

저도 C로 사전을 구현해봤는데, 저의경우
사전의 단어를 key로 하고, 단어뜻을 value의 쌍으로 정해서 B-Tree 방식으로 구정하여 검색하도록 만들었습니다.
참고로 B-Tree는 BerkeleyDB API를 사용해서 만들었구요, 단어뜻은 압축된 형태로 DB파일로 저장되도록하였습니다.

cpulpul의 이미지

저도 C로 사전을 구현해봤는데, 저의경우 
사전의 단어를 key로 하고, 단어뜻을 value의 쌍으로 정해서 B-Tree 방식으로 구정하여 검색하도록 만들었습니다. 
참고로 B-Tree는 BerkeleyDB API를 사용해서 만들었구요, 단어뜻은 압축된 형태로 DB파일로 저장되도록하였습니다.

Berkeley DB 를 사용하여 APP.. 제작중입니다.
data 량이 너무 많아서 고민입니다.
Berkeley DB DATA 저장시 압축에 관해서 좀더 자세히 말씀해주시겠습니까.
그리고 압축시 불러올때 느리지는 않나요?...

see2002의 이미지

interrupt wrote:
저도 C로 사전을 구현해봤는데, 저의경우 
사전의 단어를 key로 하고, 단어뜻을 value의 쌍으로 정해서 B-Tree 방식으로 구정하여 검색하도록 만들었습니다. 
참고로 B-Tree는 BerkeleyDB API를 사용해서 만들었구요, 단어뜻은 압축된 형태로 DB파일로 저장되도록하였습니다.

Berkeley DB 를 사용하여 APP.. 제작중입니다.
data 량이 너무 많아서 고민입니다.
Berkeley DB DATA 저장시 압축에 관해서 좀더 자세히 말씀해주시겠습니까.
그리고 압축시 불러올때 느리지는 않나요?...

BerkeleyDB자체에 압축기능은 없구요 다른 압축라이브러리를 사용했습니다. 속도는... 글쎄요 데이터량이 너무 많으면 압축할때 옵션을 적당하게 준다면(속도우선이나 압축효율우선등등) 괸찮을것 같습니다.
제가 사용해본 압축라이브러리는 bzip2이구요 API문서도 잘 되어있습니다. 큰 데이터를 압축해본건 아니지만, 불러올때 느리다는 생각은 안들더군요.
bzip2 홈페이지 http://sources.redhat.com/bzip2/

cpulpul의 이미지

see2002님의 답변에 감사드림니다. :D

cinsk의 이미지

saxboy의 이미지

http://www.kyug.net/bbs/view.php?id=tip_d&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&select_arrange=headnum&desc=asc&no=15

전에 PDA용사전에 관해서 압축과 사전 크기에 대한 실험을 간단히 했던 내용입니다. 참고하세요.

see2002의 이미지

http://218.235.97.228:9000/dic/
제가 만들어본, 가끔 사용하는 사전입니다. 별 기능은 없고 단순히 버클리DB 사전 데이터를 찾기만 합니다...
그런데 용량이 영한사전이 1.2기가, 국어 900메가, 한영480메가, 일어210메가정도가 차지해서 클라이언트에서 사용하기는 뭐할거같아 웹용으로 만든것인데요, 압축을 해도 단어뜻 데이터가 짤막짤막해서 실제로 78퍼센트의 압축효율밖에 못내더군요. :cry:
저 사전을 쓰실분은 아무도 안계시겠지만, 혹 홈페이지에 링크해서 써 주실분 환영합니다 :wink:

fibonacci의 이미지

see2002 wrote:
http://218.235.97.228:9000/dic/
제가 만들어본, 가끔 사용하는 사전입니다. 별 기능은 없고 단순히 버클리DB 사전 데이터를 찾기만 합니다...
그런데 용량이 영한사전이 1.2기가, 국어 900메가, 한영480메가, 일어210메가정도가 차지해서 클라이언트에서 사용하기는 뭐할거같아 웹용으로 만든것인데요, 압축을 해도 단어뜻 데이터가 짤막짤막해서 실제로 78퍼센트의 압축효율밖에 못내더군요. :cry:
저 사전을 쓰실분은 아무도 안계시겠지만, 혹 홈페이지에 링크해서 써 주실분 환영합니다 :wink:

이야 잘 만드셨네요.. 일한사전이 갠적으로 맘에 듭니다.
제가 지금 홈페이지 공사하고 있는데, 링크하고 싶습니다~

No Pain, No Gain.

nidle의 이미지

답변 감사합니다..
그런데 DB를 사용하지않고 순수 C,C++가지고만 만들순없을가요,
제가 아직 DB사용을 못해서,, C만가지고 만든다는게 효율성없고
귀찬다는 것은 알지만.. 우선만들어볼려구요,
앞에서질문했듯이 KEY부분만 메모리에 올려서정렬하구 검색해서 찾으려는 단어와
KEY가 일치했다고해서 하드에있는 TXT파일에 뜻부분하고(RECORD) key를 어떻게 연결해서
찾은 key에해당하는 record를 불러올수있을가요,, 고수님들이 답변 기다리겠습니다..

cedar의 이미지

key(단어) 부분의 데이터를 한번에 메모리에 올릴 수 있는 정도의
비교적 적은 양이라면, 메모리상에 이진 트리나 해쉬테이블 자료구조를 구현하면 됩니다.

C++이라면 표준라이브러리의 map이나 hash_map을 사용하면 되겠죠.

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.