ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.
1 Index(»öÀÎ)ÀÌ ¿Ö ÇÊ¿äÇѰ¡?
°Ë»ö¿£ÁøÀº ´Ü¾î´ÜÀ§·Î ÀÌ·ç¾îÁø´Ù. ¿ì¸®°¡ Linux¶ó´Â ´Ü¾î¸¦ °Ë»ö keyword·Î »ç¿ëÇÑ´ÙÇÔÀº Linux¶õ ´Ü¾î¸¦ Æ÷ÇÔÇÑ ¹®¼¸í°ú ¸µÅ©Á¤º¸¸¦ °Ë»ö½Ã½ºÅÛ¿¡ ¿ä±¸ÇÏ´Â °ÍÀÌ´Ù. ±×·¯¹Ç·Î °Ë»ö½Ã½ºÅÛÀº °¢ ´Ü¾îº°·Î ÇØ´ç ´Ü¾î¸¦ Æ÷ÇÔÇϰí ÀÖ´Â ¹®¼ÀÇ Á¤º¸¸¦ DBÈ ÇØ¼ °ü¸®Çϰí ÀÖ¾î¾ß ÇÑ´Ù.
±¹¾î»çÀü¿¡¼ ´Ü¾î·ÎµÈ ¸ñÂ÷ÆäÀÌÁö°¡ ¾øÀ»°æ¿ì¸¦ »ó»óÇØº¸µµ·Ï ÇÏÀÚ. 2 »öÀÎ DBÀÇ ±¸Ãà¿¡ ´ëÇØ¼
°£´ÜÇÏ°Ô »ý°¢ÇÏÀÚ¸é ¿À¶óŬÀ̳ª Mysql°ú °°Àº RDB¸¦ ÀÌ¿ëÇØ¼ »öÀÎDB¸¦ ±¸ÃàÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ½ÇÁ¦ ¸î¸î °Ë»ö¿£ÁøÀº ÀÌ·¯ÇÑ RDB¸¦ ÀÌ¿ëÇØ¼ »öÀÎDB¸¦ ±¸ÃàÇϱ⵵ ÇÑ´Ù. À̵é RDB¸¦ »ç¿ëÇÒ °æ¿ì, DB½Ã½ºÅÛÀ» »õ·Î ¸¸µé Çʿ䰡 ¾øÀ¸¹Ç·Î °³¹ß½Ã°£À» ´ÜÃà½Ãų ¼ö ÀÖ±ä ÇϰÚÁö¸¸ ¾Æ·¡¿Í °°Àº ¹®Á¦¿¡ Á÷¸éÇÏ°Ô µÈ´Ù.
3 »öÀÎDBÀÇ ±¸Ãà ¹æ¹ý
¿ì¼± ¹«¾ùÀ» »öÀÎÇÒ °ÍÀÎÁö¸¦ °áÁ¤ÇØ¾ß ÇÑ´Ù. ±¹¾î»çÀüÀ̶ó¸é "´Ü¾î"°¡ »öÀÎÀÌ µÇ°í, »öÀÎÀÇ Á¤º¸·Î´Â ´Ü¾îÀÇ ¼³¸íÀÌ ³ª¿ÍÀÖ´Â ÆäÀÌÁöÀÇ ¹øÈ£°¡ µÉ °ÍÀÌ´Ù.
°Ë»ö¿£Áø¿¡¼ÀÇ »öÀÎÀº ¹®¼¿¡¼ ¿øÇÏ´Â ´Ü¾î¸¦ ÃßÃâÇØ¼ ºü¸¥½Ã°£¿¡ ÇØ´ç´Ü¾î¸¦ Æ÷ÇÔÇÏ´Â ¹®¼ÀÇ À§Ä¡¸¦ °¡Áö°Ô µÈ´Ù. ÀÌ·¯ÇÑ »öÀÎÀ» ³ªµé±â À§Çؼ´Â ´Ü¾î¸¦ ÃßÃâÇØ ³¾ ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¿µ¹® ¹®¼¸¦ ±âÁØÀ¸·Î »ý°¢ÇØ º¸¸é ´Ü¾îÃßÃâ ÇÁ·Î±×·¥Àº °£´ÜÇÏ°Ô ¸¸µé ¼ö ÀÖ´Ù. »öÀÎDB¿ª½Ã °¡´ÉÇÏ¸é ´Ü¾îÀÇ °¹¼ö°¡ ÀûÀ» ¼ö·Ï È¿À²ÀûÀÎ °Ë»öÀÌ °¡´ÉÇÑ DB¸¦ ¸¸µé ¼ö Àֱ⠶§¹®¿¡ ÇüÅÂ¼Ò ºÐ¼®±â°¡ »ç¿ëµÈ´Ù. ƯÈ÷ Çѱ۹®¼¸¦ »öÀÎÇϰíÀÚ ÇÒ°æ¿ì ¾ó¸¶³ª ÁÁÀº ÇüÅÂ¼Ò ºÐ¼®±â¸¦ °¡Áö°í ÀÖ´À³Ä°¡ »öÀÎDBÀÇ Ç°ÁúÀ» °áÁ¤ÇÏ°Ô µÈ´Ù. ¿¹¸¦ µé¾î¼ ¾Æ·¡¿Í °°Àº ³»¿ëÀ» Æ÷ÇÔÇÑ 4°³ÀÇ ¹®¼°¡ ÀÖ´Ù°í °¡Á¤ÇØ º¸ÀÚ. Document 1 : Linux Programing language Perl, Python Document 2 : Linux's Free mind Document 3 : Hello World gnu mind´Ü¾îÃßÃâ±â¸¦ µ¹·Á¼ ´ÙÀ½°ú °°Àº ´Ü¾îÀÇ ¸ñ·ÏÀ» ¾òÀ» ¼ö ÀÖÀ» °ÍÀÌ´Ù. D1 = {linux, programing, language, perl, python}
D2 = {linux, Free, mind}
D3 = {hello, world, gnu, mind}
¾òÀ» ¼ö ÀÖ´Â ´Ü¾î´Â À¯ÀÏÇÑ Å°¸¦ °¡Áö´Â setÇüÅÂÀÇ ÀڷᱸÁ¶°¡ µÇ¸ç, ´ÙÀ½°ú °°Àº ´Ü¾îµéÀ» Æ÷ÇÔÇÏ°Ô µÉ°ÍÀÌ´Ù - °£´ÜÈ÷ ¸»Çؼ ÇÕÁýÇÕ -.Terms = {linux, programing, language, perk, pytoh, free, mind, hello, world, gnu}
ÀÌ·¯ÇÑ ´Ü¾îµéÀº ´Ù½Ã, "¾î´À ¹®¼"¿¡ Æ÷ÇԵǾî ÀÖ´ÂÁö¿¡ ´ëÇÑ Á¤º¸¸¦ µ¡ºÙ¿©Áà¾ß ÇÑ´Ù. key/value¸¦ °¡Áö´Â mapÀڷᱸÁ¶°¡ µÉ °ÍÀÌ´Ù.map<string Terms, vector<string> Documents> IndexMap;
---
linux = {Document 1, Document 2};
perl = {Document 1};
mind = {Document 2, Document 3};
...
¿©±â±îÁö ÁøÇàµÇ¾ú´Ù¸é »öÀÎDB´Â ¿Ï¼ºµÈ °ÍÀ¸·Î º¼ ¼ö ÀÖ´Ù - ¹°·Ð Á¦´ë·ÎµÈ »öÀÎDB¸¦ ±¸ÃàÇÒ·Á¸é "Á߿䵵"µîÀ» Æ÷ÇÔÇÑ ºÎ°¡Á¤º¸µéÀÌ ´õ Ãß°¡µÇ¾î¾ß ÇϰÚÁö¸¸ -. °Ë»öÀº °Ë»ö¿£Áø¿¡ ¸Ã±â¸é µÈ´Ù. 3.1 Å×ÀÌºí ±¸¼º
±×·³ È¿°úÀûÀÎ »öÀÎ Å×À̺íÀ» ±¸¼ºÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ¼ °í¹ÎÀ» ÇØº¸µµ·Ï ÇϰڴÙ. »öÀÎDB¿¡ µé¾î°¡´Â Á¤º¸´Â À§¿¡¼ ¼³¸íÇßµíÀÌ map<string Terms, vector<string> Documents> ÀÌ´Ù. À̸¦ µÎ°³ÀÇ Çʵå·Î ±¸¼ºÇÏ°Ô µÉ°æ¿ì, ù¹øÂ° Çʵå´Â À¯´ÏÅ©ÇÑ ´ÜÀÏ °ªÀÌ µÇ°ÚÁö¸¸, µÎ¹øÂ° Çʵå´Â vector°¡ µÇ¾î¾ß ÇÑ´Ù´Â ¹®Á¦Á¡ÀÌ ÀÖ´Ù. ÀÌ ¹®Á¦´Â Documents vectorÀ» º°µµÀÇ Å×À̺í·Î ±¸¼ºÇÏ´Â °ÍÀ¸·Î ÇØ°áÇÒ ¼ö ÀÖ´Ù. ![]()
±×¸²ÀÌ Á¶ÀâÇϱä ÇÏÁö¸¸ ÀÌÇØÇϴµ¥, ¹®Á¦´Â ¾øÀ¸¸®¶ó »ý°¢µÈ´Ù.
À§ÀÇ µÎ°³ÀÇ Å×À̺íÀÌ¸é ±âº»ÀûÀÎ ¿ä°ÇÀ» ÃæÁ·ÇÏ´Â À̸¦Å׸é ÇнÀÀÇ ¿ëµµ¸¦ À§ÇÑ »öÀÎDB¸¦ ±¸ÃàÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ¼ºñ½º°¡ °¡´ÉÇÑ ¼öÁØÀÌ µÇ±â À§Çؼ´Â "¹®¼¿ä¾à", "Á߿䵵", "µ¥ÀÌÅÍ °»½ÅÀÏ"µîÀÇ ºÎ°¡Á¤º¸°¡ Á¤¸®µÇ¾î¾ß ÇÑ´Ù. À̸¦ À§Çؼ´Â º°µµÀÇ summary Å×À̺íÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù. 3.2 ´Ü¾î ÃßÃâ±â
´ÙÀ½Àº regex¸¦ ÀÌ¿ëÇØ¼ ¸¸µé¾îº» °£´ÜÇÑ ¿µ¹®´Ü¾î ÃßÃâ±âÀÌ´Ù. #include <sys/types.h> #include <regex.h> #include <string.h> #include <stdio.h> #include <errno.h> int main(int argc, char **argv) { FILE *fp; int rtv; regex_t preg; char linebuf[1024]; char *tr; char seps[] = " -.,()\";:"; char msg[64]; if (argc != 3) { printf("Usage : %s [filename] [pattern]\n", argv[0]); } fp = fopen(argv[1], "r"); if (fp == NULL) { perror("Error "); return 1; } rtv = regcomp(&preg, argv[2], REG_EXTENDED|REG_NOSUB); if(rtv != 0) { regerror(rtv, &preg, NULL, 0); return 1; } while(fgets(linebuf, 1024, fp) != NULL) { linebuf[strlen(linebuf)-1] = '\0'; tr = strtok(linebuf, seps); while(tr != NULL) { tr = strtok(NULL, seps); if (tr != NULL) { if (regexec(&preg, tr, 0, NULL, 0) == 0) { printf("::%s\n", tr); } } } } }´ÙÀ½°ú °°ÀÌ ½ÇÇàÇÏ¸é µÈ´Ù. # ./parser TestDoc/rfc1023.txt "[a-zA-Z]{2}+"
3.3 Indexer
¾Æ·¡ÀÇ ÇÁ·Î±×·¥Àº ÁÖ¾îÁø ÆÄÀÏ¿¡¼ ´Ü¾î¸¦ ÃßÃâÇØ¼ »öÀÎÀ» ÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. #include <sys/types.h> #include <regex.h> #include <string.h> #include <stdio.h> #include <errno.h> #include <map> #include <vector> #include <string> #include <set> using namespace std; int main(int argc, char **argv) { FILE *fp; int rtv; regex_t preg; char linebuf[1024]; char *tr; char seps[] = " -.,()\";:{}'+"; char msg[64]; map<string, set<string> > IndexMap; map<string, set<string> >::iterator Mi; vector<string> FileList; FileList.push_back("TestDoc/rfc1023.txt"); FileList.push_back("TestDoc/rfc1036.txt"); if (argc != 3) { printf("Usage : %s [filename] [pattern]\n", argv[0]); } rtv = regcomp(&preg, argv[2], REG_EXTENDED|REG_NOSUB); if(rtv != 0) { regerror(rtv, &preg, NULL, 0); return 1; } for(int i = 0; i < FileList.size(); i++) { fp = fopen(FileList[i].c_str(), "r"); if (fp == NULL) { perror("Error "); return 1; } while(fgets(linebuf, 1024, fp) != NULL) { linebuf[strlen(linebuf)-1] = '\0'; tr = strtok(linebuf, seps); while(tr != NULL) { tr = strtok(NULL, seps); if (tr != NULL) { if (regexec(&preg, tr, 0, NULL, 0) == 0) { Mi = IndexMap.find(tr); IndexMap[tr].insert(FileList[i]); } } } } fclose(fp); } printf("Term Size %d\n", IndexMap.size()); Mi = IndexMap.begin(); set<string>::iterator Si; int inum; // »öÀΰá°ú Ãâ·Â while (Mi != IndexMap.end()) { printf("==== %s ==== \n", Mi->first.c_str()); Si = Mi->second.begin(); inum = 1; while(Si != Mi->second.end()) { printf("%02d : %s\n", inum, Si->c_str()); inum++; *Si++; } *Mi++; } } 4 ÇöÀçÀÇ »öÀÎ DB°¡ °¡Áø ¹®Á¦Á¡°ú ÇØ°á¹æ¾È4.1 Âü/°ÅÁþ¸¸À» ÆÇ´ÜÇÒ ¼ö ÀÖ´Ù
ÇöÀç ¸¸µé¾îÁø »öÀÎ DB´Â ºÒ¸®¾ð ¸ðµ¨À» µû¸¥´Ù. ºÒ¸®¾ð ¸ðµ¨Àº ¸Å¿ì ºü¸£´Ù¶ó´Â ÀåÁ¡À» °¡ÁöÁö¸¸, ¿À·ÎÁö "Âü"°ú "°ÅÁþ"¸¸À» ³Ñ°ÜÁشٴ ´ÜÁ¡ÀÌ ÀÖ´Ù. ÇØ´ç ´Ü¾î°¡ ±× ¹®¼¿¡ Æ÷ÇԵǾîÀÖÀ¸¸é 1, ±×·¸Áö ¾ÊÀ¸¸é 0À» ³Ñ°ÜÁÖ´Â ½ÄÀε¥, ´Ü¼øÈ÷ ÇØ´ç¹®¼¿¡ ´Ü¾î°¡ Æ÷ÇԵǾî ÀÖ´Ù´Â Á¤µµ¸¸À» °¡Áö°í´Â ³ôÀº ÁúÀÇ °Ë»ö ¼ºñ½º¸¦ Á¦°øÇÒ ¼ö ¾ø´Ù. »ç¿ëÀÚ´Â Á߿䵵°¡ ³ôÀº ¹®¼¸¦ ã±â¸¦ ¿øÇϱ⠶§¹®ÀÌ´Ù. ±×·¯¹Ç·Î »öÀÎ DB´Â "Á߿䵵"µîÀÇ ´Ù¸¥ ±âÁØÀ¸·Î °Ë»ö°á°ú¸¦ ¼ÒÆ®ÇØ¼ °á°ú¸¦ µÇµ¹·ÁÁÙ ¼ö ÀÖ¾î¾ß ÇÑ´Ù.
¹®¼¿¡ ´ëÇÑ Á߿䵵¹× °¡ÁßÄ¡ °è»ê¿¡ ´ëÇÑ ³»¿ëÀº µû·Î ´Ù·çµµ·Ï ÇϰڴÙ.
|
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|