VB.NET2009.02.07 21:03
이미지의 바코드를 읽어 보자!

이 article은 http://www.codeproject.com/KB/recipes/bcreader2of5.aspx 의 내용이며
해석 및 수정하였음을 밝힙니다.

관련 소스 :

[소개]
이 글은 바코드를 표현 할 수 있는 5가지 방법을 각각 두자리 숫자로 인식 할수 있는

알고리즘이다. 즉, 두자리 수를 가지는 다섯가지의 바코드 표현 방법을 인식 한다.

현재 실세계에서 쓰이는 바코드 표현법이다.


[배경]
만약 당신이 바코드를 읽어서 처리 해야하는 프로그램을 개발 한다면, 시중에 나와있는

비싼, ocx를 사용해야 할 것이다. 실제론 주민번호 검사 처럼 간단한데 말이다.

단, 이 방법은 이미지를 읽는 것으로, 스캐너와 연동되지 못한다는 점을 알려드린다.

해결법은, 공개된 무료 스캐너 ocx와 이미지 인코더로 순간적으로 스캔된 내용을 이미지로

변환 한 후, 이 클래스를 이용하여, 바코드를 해석하면 될것이다.

무료 스캐너 ocx, bitmap encoder 는 구글에서 단 10분의 노력만에 찾을수 있을것이다.

[코드 소개]


메인 클래스는 상업용 바코드를 읽을수 있는 gmseNWScanner 이다.


인자로는 추상 클래스로 정의된 gmseNWBarcodeDef 이고, gmseBarcodeDef2of5interleaved 클래스는


gmseNWBarcodeDef 가 구현(implements)된 것이다.


결과값은 gmseNWResult와 gmseNWResultCollection 클래스 값으로 리턴된다.




[구현내용]

두가지 너비를 가지는 바코드는 narrow bar(n) 과 wide bar(w) 로 표현되는데,


이미지에서 추출한 막대를 하나씩 잘라서 비교 할때 구분 하는 방법이다.


또, 비교 하는 방법은 지금까지 나온 검색 알고리즘의 최고봉인 해쉬테이블을 이용하여 비교한다.


만약 이 방법으로 구현하였지만, 제대로 해석 하지 못할 경우는 이미지 품질이 떨어져서


생기는 이유이니, 이미지를 스캔할때, 보간법으로 완전한 하나의 막대로 표현 하길 바란다.











Posted by dotnetpower

댓글을 달아 주세요

VB.NET2009.02.07 20:58
이글 내용은 http://www.codeproject.com/vb/net/Delegate.asp 에서

발췌하여 번역 및 수정하였습니다.



delegate란?

포인터의 개념과 아주 유사한데요, C나 C++의 함수포인터 또는 typedef 문이랑 매우 비슷한

개념입니다. C/C++ 에 비유하자면 함수가 위치한 메모리 주소를 일컫지만 단지

주소을 알고 있을뿐 다른 부가적인 정보를 가지고 있지 않습니다.

이때문에 C/C++에선 잘 쓰면 포인터가 아주 유용하지만 그렇지 않을경우

(파라메타를 잘못 전달 하였을 경우) 심각한 오류를 일으킬수 있습니다.

예전부터 함수 포인터를 호출하는건 지원하는 랭귀지에 많이 의존해 왔죠

포인터는 본질적으로 위험하다고 많이 얘기합니다.

하지만 Delegate는 .NET의 CLR 안에서는 Type-Safe 메커니즘을 제공하여 C/C++의 포인터와 같은

역할을 하면서도 안전하게 사용할 수 있습니다.

그런데 왜 포인터를 쓸까요?

제가 요즘에 여러가지를 배우고 있는데요, 포인터를 쓴다는건 메모리 주소를 바로 찍는다는겁니다.

예를 들어 함수를 하나 호출하려고 하는데, 어디 있는지 모르면 찾아야 겠죠?

그치만 포인터는 함수가 어디에 위치 해 있는지 그 주소를 바로 찍어주기땜에 빠르다는거죠

참고로 이러한 방법을 컴퓨터구조학에선는 인덱스 어드레싱 이라고 합니다.(비슷한 개념)

또, 찾아보니깐.. 포인터를 게임 개발, 암호화, 알고리즘 에 많이 쓰더군요 ㅋ

닷넷이나 자바에서는 포인터랑 비슷한 delegate를 주로 다중쓰레드 처리할때 많이 쓰고요

결국 약간의 성능을 높이고자 쓰는것 같습니다. 저는 잘 안쓸것 같네요 ㅋ


말보단 코드로 이해하는게 빠르겠죠? ^^;

그냥 간단한 콘솔용 인사말입니다.



delegate를 선언하는 방법은 아래와 같습니다.




실제 가져다 쓸 메소드 두개를 작성합니다.


그리고 sub main() 프로시저에 다음 코드를 넣고요

delegate를 쓰기위해선 첨에는 invoke 메소드를 호출해야 하는데요 아랬줄에 이 코드를 넣고요


이것 까지.. ^^;

놀랍지 않으세요? 엇? 근데 invoke메소드가 빠진게 아니냐구요?

아니에요, 인스턴스 선언할때 이미 지정 했습니다.


아래코드는 전체적인 코드 입니다.

이 글은 비베따위를(http://www.mhvb.net) 에서도 볼수 있습니다.
Posted by dotnetpower

댓글을 달아 주세요

Flex2009.02.06 14:38

2001년도에 아마도 플래쉬 버전이 4.0일때, 웹사이트 위에서 동작하는 플래쉬를 보고는
엄청난 충격을 받았다. 당시 거의 모든 사이트 들이 웹사이트에 애니매이션을 주고자 animated GIF 를 사용할 시대이다.

당시 와레즈 사이트들이 많이 활성화 되어 있던터라, 툴을 어렵지 않게 구할수 있었고, 직접 애니매이션을 만들어 봤는데 정말 쉽고 빠르게 다룰수 있게 되었다. 하지만 디자인 감각이 꽝인 나로서는 애니메이션을 만들고 아무리 화려하게 구현을 해도 이쁘지가 않고 아마추어 티가 확 났다. 그 후로는 바로 접었지만.. but, 4.0에 존재하는 단축키를 거의 익히고 나서... ㅎㅎ

얼마전에 같이 일하던 친구가 이직을 하면서 맡은 프로젝트가 FLEX 로 개발을 하는것이였는데, 또다시 충격을 받았다.
플렉스에대한 기초지식이 없던 나로써는 놀라울 따름이였다.
단지 플래쉬의 확장이라고 생각했는데, 그게 아니라 새로운 언어의 탄생이다. 물론 플래쉬에 기반을 두긴 하지만, 모든 클래스가 비슷해 보이긴 하지만 실제로는 완전히 다른 것이다.

플래셔들은 디자이너 출신이 대부분이기 때문에 플렉스로 넘어가기 힘들어한다. 물론 우리 플래셔도 플렉스로 넘어가는것을 어려워 한다.

플래쉬 개발자 커뮤니티들은 거의 ActionScript1이나 2 에 대한 이슈를 다루고 있는것이 사실이다.
AS3가 객체지향이라서 플렉스와 비슷하다고 생각하시는 분들이 많은데, 그건 잘못 알고 있는것 같다.

예전에 VB6.0으로 한참 개발할때 .Net Framework 이 나오면서 VB.NET을 해 봤는데, 폼하나도 제대로 띄우지 못한 기억이 난다.

그러므로, FLEX를 한다는것은 새로운 언어를 받아들인다는 생각으로 시도하는것이 좋다고 생각한다.
또한, 우리나라에서는 UX(User eXperience)를 좋아하기 때문에 대형 프로젝트도 FLEX로 구현되는 사례가 많다.

Adobe社 에서 내놓은 BlazeDS를 이용해서 FLEX에서 JAVA Object를 곧바로 호출할수 있는 방법을 제시한다.
그러면 Data Exchange를 위한 XML를 쓰지 않고, 곧바로 객체를 호출하여 값을 넘길 수 있는데
그러면서, 실제 FLEX는 MVC모델로 봤을때 View 로 깔끔하게 빠질수 있고, 자바코드는 Controller가 되며
Model은 Hibernate나 iBatis를 사용하게 된다. 거기다가 Spring Framework 을 얹으면 완벽한(?) 모델이 될것이다.

그러므로, FLEX는 자바 또는 닷넷 프레임웍에서 앞으로 뷰(View)단을 처리할 중요한 역할을 할것이다.
Posted by dotnetpower

댓글을 달아 주세요

Flex2009.02.06 11:21

이클립스를 실행 하여 [File]-[New]-[Project] 선택후 아래와 같이 Flex Project을 선택한다.

image

프로젝트 이름을 넣고, Application server type 을 J2EE로 설정 한다.

image

Target runtime을 톰캣으로 설정하는데, 없을때는 New 버튼을 눌러 톰캣 홈 패스를 잡아주면 셀렉트 박스에 나타나게 된다.
그리고, Flex WAR 파일은 blazeds.war 선택.

image

하단에 Output folder URL 에서 포트를 반드시 8400으로 변경!

image

이클립스 IDE 화면을 Flex Development 모양으로 변경(예)

image

프로젝트 Navigator 에서 프로젝트명을 마우스 오른쪽 클릭후 Properities선택

image

Flex Server 에서 Context root를 WebContent에서 프로젝트명으로 변경(/winFLEX)

image

/WEB-INF/lib/ 폴더에 탐색기에서 직접 spring관련 jar 파일과 org.springframework.flex-1.0.0.M1.jar 파일을 드래그 하여 추가

image

/WebContent/WEB-INF/web.xml 파일에서 MessageBroker Servlet 부분을 아래와 같이 변경.

<!-- MessageBroker Servlet -->
    <servlet>
        <servlet-name>spring</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>           
            <param-value>/WEB-INF/applicationContext.xml</param-value>       
        </init-param>       
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/messagebroker/*</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>

Ctrl + N 을 눌러 Java의 Package 선택

image

test 패키지 생성

image

다시 Ctrl+N을 하여 Class 선택 후 이름을 TestService 로 정하고 Finish

image

코딩.

image

/WebContent/WEB-INF/ 위치에 applicationContext.xml 파일을 생성

image

/WebContent/WEB-INF/flex/services-config.xml의 services에  default-channels 추가

image

winFLEX.mxml을 다음과 같이 코딩.

image

프로젝트의 Export Release Build 실행

image

image 버튼으로 start on Server 선택. 시작이 되었으면

웹브라우저에서 http://localhost:8400/winFLEX/winFLEX.html 실행하면 이와같이 잘됨.

image

Posted by dotnetpower

댓글을 달아 주세요

  1. 덕분에 삽질을 많이 줄였습니다~
    그런데 질문! 위에 "Flex Server 에서 Context root를 WebContent에서 프로젝트명으로 변경(/winFLEX)" 이미지 보면
    포트번호가 8080 번으로 되어 있는데 괜찮은건가요?
    전 turnkey를 쓴 것이 아니라 모든 8400 포트를 8080 포트로 바꿔서 설정했기 때문에 괜찮았지만서도 말이죠...흠흠흠.
    ---------
    다른분 참고하시라고 이미지 잘린부분 소스 올립니다~
    <bean id="Test" class="org.springframework.flex.messaging.remoting.FlexRemotingServiceExporter"
    p:messageBroker-ref="mySpringManagedMessageBroker"
    p:service-ref="TestService"
    />
    --------

    2009.03.21 22:57 [ ADDR : EDIT/ DEL : REPLY ]

한글 형태소 분석2009.02.06 09:59

형태소 분석기를 만들면서 아주 많이 참고한 문서.

모란소프트(http://www.moransoft.com)

아래의 자료들은 Text Retrieval and Mining 이란 강의를 진행하면서 작성한 강의용 자료입니다.(모란소프트)

아래의 자료는 수정 재배포하실 수 있습니다.

본 자료에서 기초부분은 (1) 숭실대학교 이준호 교수의 정보검색론 강의 교제를 정리하였고, 확장과 마이닝 부분은 (2) Carnegie Mellon 대학의 Information Retrieval 11-741 강의 교제와 (3) Stanford 대학교의 강의 CS276a IR and Mining, CS276b Web Search and Mining, CS276b Text information Retrieval and Minig의 강의자료를 기본으로 하여 재구성하였습니다. Biz부분은 Search Engine Meeting Conference에서 각 기업이 발표한 내용을 수정없이 게재하였습니다. 마지막으로 총정리 부분은 본 자료의 내용을 정리하였는데, ICU의 맹성현 교수님의 자료를 일부 참조하였습니다.

정보검색론-1부 기초-1주-웹검색.ppt
정보검색론-1부 기초-2주-정보검색시스템.ppt
정보검색론-1부 기초-3주-색인과렉시콘.ppt
정보검색론-1부 기초-4주-쿼리분석과랭킹.ppt
정보검색론-1부 기초-5주-색인어추출.ppt
정보검색론-1부 기초-6주-질의확장과 적합성피드백.ppt
정보검색론-2부 확장-7주-확률적IR.ppt
정보검색론-2부 확장-8주-문서범주화.ppt
정보검색론-2부 확장-9주-LSA.ppt
정보검색론-2부 확장-10주-문서분류.ppt
정보검색론-2부 확장-11주-추천시스템.ppt
정보검색론-3부 마이닝-12주-1-정보추출.ppt
정보검색론-3부 마이닝-12주-2-HMM.ppt
정보검색론-3부 마이닝-13주-1-TextMinigIntro.ppt
정보검색론-3부 마이닝-13주-2-LexiconBuilding.ppt
정보검색론-3부 마이닝-13주-3-FirstStoryDetection.ppt
정보검색론-3부 마이닝-14주-QA System.ppt
정보검색론-3부 마이닝-15주-Summarization.ppt
정보검색론-4부 Biz-1주-구글.pdf
정보검색론-4부 Biz-2주-야후 Internet Search Engines Past and Future.pdf
정보검색론-4부 Biz-3주-MS Personal Information Retrieval.pdf
정보검색론-4부 Biz-4주-FAST Next Generation Search Technology Advancements.pdf
정보검색론-4부 Biz-5주-CLIR semantics for the Web.pdf
정보검색론-4부 Biz-6주-글로벌 검색엔진마케팅 트랜드 - 오버추어.pdf
정보검색론-4부 Biz-7주-Search Market and Technologies-yahoo korea 031008.ppt
정보검색론-4부 Biz-8주-Vivisimo Arguments for Clustering and Meta-Search as a Universal Norm for Information Retrieval.pdf
정보검색론-4부 Biz-9주-Verity - Text and XML querying - Is There a Common Ground.pdf
정보검색론-4부 Biz-12주-(IBM) UIMA - A component architecture for integrating structured and unstructured information in search systems.pdf
정보검색론-4부 Biz-12주-Clairvoyance- Commercializing Information Extraction - Lessons from WhizBang Labs.pdf
정보검색론-4부 Biz-14주-Linguit - The Deployment of a Mobile Question Answering System.pdf
정보검색론-16주-총정리.ppt



Posted by dotnetpower

댓글을 달아 주세요

  1. 좋은 자료 감사합니다. 잘볼께요~

    2011.04.04 10:26 [ ADDR : EDIT/ DEL : REPLY ]

한글 형태소 분석2009.02.06 09:57
학교 졸업작품으로 만든 형태소 분석기 이다.
한글 언어의 모호함과 용언화 부분에서 오류가 많다
이 부분을 조금 더 고치고 수정한다면 훌륭한 한글 색인어를 만들수 있겠다.

아래 페이지가 오류가 나면 http://moon.winglish.com/iframe_experience.aspx 으로 접속을 해서 테스트 해 볼수 있다.

Posted by dotnetpower

댓글을 달아 주세요

한글 형태소 분석2009.02.06 09:53

 

1. 형태소 분석이란

 형태소 분석이란 자연 언어 분석의 첫 단계로서 단어(한국어의 경우 어절)를 구성하는 각각의 형태소들을 인식하고 불규칙 활용이나 축약, 탈락 현상이 일어난 경우 원형을 복원하는 과정을 말한다(강승식 저).


2. 형태소의 정의

 형태소란 단어(어절)을 구성하고 있는 최소한의 언어 요소라고 할 수 있다. 가장 쉽게 생각할 수 있는 것이 '명사', '대명사', '수사' 등의 체언, '형용사', '동사' 등의 '용언', '부사', '관형사', '감탄사' 등의 독립언, '조사', '어미', '선어말어미', '접사' 등의 기능어가 있다. 형태소는 실질적인 의미를 가지고 있는 실질형태소와 기능적 요소를 담당하고 있는 기능형태소로 크게 양분되며, 색인어 추출을 위한 형태소 분석시 이 둘을 분리하는 과정이 우선시 된다. 한마디로 형태소는 더 이상 별개의 의미나 기능으로 분리할 수 없는 최소한의 언어 요소라고 보면 될 듯 하다.


3. 한국어 형태소 분석

 우리가 검색엔진 제작시 형태소 분석에 봉착할 수 밖에 없는 이유가 있다. 바로 우리가 다루는 언어가 한국어이기 때문이다. 영어를 보면 소년이라는 의미의 'boy'가 복수로 변하기 위해서는 끝에 '-s'를 첨가하면 된다. 'boys'가 바로 그것이다. 특별히 단어의 형태가 크게 변한다거나 다양한 기능어가 붙지 않는다. 그러나 한국어는 다르다. 한국어의 '소년'이라는 명사에는 '소년의', '소년은', '소년들', 소년인가요', '소년아' 등 각종 기능어 및 접사, 용언화 과정 등이 가능하다. 따라서 이러한 언어적 변화 현상을 찾아내어 최종의 형태소를 인식해야 한다. 그 규칙을 찾아내기란 쉽지 않고 이를 기계적으로 구현하는 것 역시 만만치 않다.



4. 형태소 분석의 필요성

 그렇다면 한국어에 왜 형태소 분석이 필요할까. 바로 색인어 추출을 위해서이다. 우리가 사용하는 색인어 및 검색어는 주로 명사 위주이다. 이런 명사를 추출하기 위해서는 불행히도 각종 기능어와 타 품사, 형태 변형 등의 인식이 필요하게 된다. 물론 형태소 분석없이 별도의 색인어 추출 방법을 사용하게 된다면 관심을 가지지 않아도 되는 것은 당연하다.검색엔진에 있어 색인 DB의 구조와 랭킹 알고리즘 역시 중요하나 가장 적합하고 확실한 색인어가 저장되어 있어야만 그 성능이 탁월할 수 있다. 한국어 텍스트를 단순히 공백(어절)으로 나눠 색인하게 되면 초라한 검색 결과를 보게 되는 이치이다.


5. 색인어 추출 방법

 색인어를 추출하는 방법은 여러가지가 있으나, 이 프로젝트에서는 명사, 미등록어, 영어(영어는 품사를 가리지 않고 모두 색인어 처리 한다.) 추출 방법은 모란소프트의 조영환 박사의 Text Retrieval and Mining #4의 벡터 공간 모델의 참고 하였고, 문서 색인어의 가중치 산출에는 lnc기법을 적용하였다.



게시물이 등록 될 때 색인어 추출 후 즉시 DB에 insert를 하는데, 이때 CPU cost가 높아지는것은 사실이나, 스케쥴링 처리 하지 않고, Process의 Priority를 Lowest로 하여 시스템을 생각한 색인 등록이며, 등록시 시간이 걸리기 때문에 게시물이 등록 될때 쓰레드 처리를 하여 비동기로 insert 처리를 한다.


6. 형태소 분석의 필요성

 그렇다면 한국어에 왜 형태소 분석이 필요할까. 바로 색인어 추출을 위해서이다. 우리가 사용하는 색인어 및 검색어는 주로 명사 위주이다. 이런 명사를 추출하기 위해서는 불행히도 각종 기능어와 타 품사, 형태 변형 등의 인식이 필요하게 된다. 물론 형태소 분석없이 별도의 색인어 추출 방법을 사용하게 된다면 관심을 가지지 않아도 되는 것은 당연하다.검색엔진에 있어 색인 DB의 구조와 랭킹 알고리즘 역시 중요하나 가장 적합하고 확실한 색인어가 저장되어 있어야만 그 성능이 탁월할 수 있다. 한국어 텍스트를 단순히 공백(어절)으로 나눠 색인하게 되면 초라한 검색 결과를 보게 되는 이치이다.


Posted by dotnetpower

댓글을 달아 주세요

기타2009.02.06 09:33
작성할때 html 모드로 변경하고

<textarea class="vb.net" name="code">
Dim strHello as String
</textarea>

처럼 코드를 넣으면 된다.

지원 가능한 aliases는 아래와 같다.

Supported languages

Here's a list of supported languages and their aliases:

Language Aliases
C++ cpp, c, c++
C# c#, c-sharp, csharp
CSS css
Delphi delphi, pascal
Java java
Java Script js, jscript, javascript
PHP php
Python py, python
Ruby rb, ruby, rails, ror
Sql sql
VB vb, vb.net
XML/HTML xml, html, xhtml, xslt




Posted by dotnetpower

댓글을 달아 주세요

기타2009.02.06 09:28

테스트 소스코드
Posted by dotnetpower

댓글을 달아 주세요

기타2009.02.05 10:45
Tistory 하기 어렵네...

초대장 구하기가 이렇게 어려울줄이야...

다행이 비따(http://www.mhvb.net) 의 pearly2 님께서 주셨네...

감사합니다. ^^;
Posted by dotnetpower

댓글을 달아 주세요