
프로젝트 중이다.
영어는 예시도 많고, 정말 잘된다. 별다른 고민없이..
근데, 문제는 난 한글 기준으로 프로젝트를 진행 중이다.
생각해보니 지금까지 영어를 대상으로 하는 정규식만 써봤다.
한글과 숫자, 영어를 인식하는 정규식이 필요함을 느낀다.
우선 대략 이런 상황이다.

위키 백과의 자연어 처리 키워드를 검색한 페이지이다.
여기서 console 창에 이렇게 구문을 써봤다.



ctrl+F 한 결과..^^
이번에는
위키 백과 페이지에 영어가 너무 없어서 구글 페이지에서 다시 테스트 해봤다.



bodyText한국어, 영어 둘 다 잘됨.
bodyNum둘 다 잘됨.
bodyText.match('자연어')되긴 되는데, 단 한개만 인식함..
bodyText.match(new RegExp('\\b자연어\\b', 'gi')).length;null 뜸~ 🥹
bodyText.match('Agent')되긴 되는데... 무조건 정확하게 Agent 만 인식할수있다.
bodyText.match(new RegExp('\\Agent\\b', 'gi')).length;잘됨~

한국어 기준으로 도대체 ctrl+F 보다 나은게 뭐가 있냐. 저 js 코드는..
물론? 영문 페이지에서는? of course 잘된다.

bodyText.match('the') 는 안쓰는게 좋다. 왜냐면,, 말도 안되는거다.
- 단순히
bodyText.match('the')는 the 앞뒤로 붙어있는 공백이나 글자를 잘 못알아먹기때문에 찾기가 힘들다.- 그래서 정규표현식
RegExp를 쓰는거다.- 근데, 한글은 아예 인식 안해주는거같다.(null null 합니다~)
- 근데 한글 페이지에서
bodyText.match(new RegExp('\\bthe\\b', 'gi')).length;를 하면 너무나도 잘된다... (영어가 섞여있다는 조건 하에)
한글도 잘 받아들이는 정규표현식을 찾으러 떠나볼거다.
아.. 물론... python 코드에서의 한글 정규식은 배웠다...
자바스크립트에서는... 모른다...ㅠㅠ.....

왜 그냥 regex는 감지하는데 console.log 를 찍으면 안되는거지?
자바스크립트... 기억이 안난다...


자바스크립트에서의 array[] 와 object{} 의 차이..

헐 왜이렇지

Filter 칸 비었는지, 그리고 아래와 같이 체크되어있는지 확인해주자.

출처 : https://velog.io/@cheal3/자바스크립트-크롬-콘솔창에-undefined가-나오는-이유
결론은, 문과 표현식(expression)의 특징을 이해하면 되는거다.

예를 들어, 첫번째 구문은 값으로 표현될 수 있는 구문이다.
두번째 구문은 값으로 평가될 수 없다. 값으로 평가될 수 없기 때문에 변수에 할당할 수 없기 때문이다. (<- 이 부분 이해가 잘 안된다.)
크롬의 콘솔창에서는 표현식의 평가된 값을 반환하기 때문에 표현식이 아닌 문을 실행하였을 때 undefined를 반환한 것이다.
/[ㄱ-ㅎㅏ-ㅣ가-힣]/g
한국어만 빼서 전역으로 검색해준 결과다. 영어, 숫자, 괄호같은 특수기호는 제외!
/[자연어]/g
자 / 연 / 어 글자가 포함된건 모두 찾아 준다.
/자연어/g
자연어 라는 키워드만 전역으로 깔끔하게 찾아준다!

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/RegExp
진짜 답을 찾음..


챗 지피티 만세다 만세..

1. 구글에서 자연어처리를 검색한다.


// 검색창에서 입력받은 값을 keyword 에 할당한다.
var keyword = document.querySelector('textarea').value;
//정규식 객체를 생성하면서 위의 입력받은 keyword 변수를 넣고,
//global 하게, 대소문자 관계없이 인식하도록 넣었다. (나중에 영어 들어올걸 감안해서)
const regex = new RegExp(keyword, 'gi');
//전체 텍스트 bodyText와 만들어놓은 정규식 regex 를 match 하고
//그 개수를 myNum 변수에 할당한다.
var myNum = bodyText.match(regex).length;
근데 여기서 문제는 ...

ctrl + F 한 결과는 31개..

띄어쓰기한 결과는 ctrl +F 에서도 다르게 나온다..ㅠ.ㅠ

자연어처리 검색은 제대로 됐다. 내가 bodyText 를 할당을 제대로 못했던거 같다.
자연어처리 를 입력받든 자연어 처리를 입력받든
띄어쓰기를 감안하여 정규식패턴을 짜주는 함수가 필요할 듯 하다.

근데 이건 말도 안되는 해결책이다. 무조건 두 글자씩 끊어서 띄어쓰기를 한다고?
'아버지가방에들어가신다'와 같은 문장을 검색할 일은 드물겠지만..
한국어에는 띄어쓰기에 따라서 의미가 달라지는 경우가 많다.

그래서 다시 gpt 에게 물었더니..
결국, 드디어 드디어..! 형태소분석을 하라고 한다;;;
결국 input 값을 프론트에서만 검색하기에는 부족하기에,...
이걸 서버로 넘겨야한다.. 그리고 서버에서 형태소 분석을 한걸 다시 받아서 자바스크립트에서 돌려봐야하는거다...ㅠ.ㅠ 하 정말 산너머산이구나~!!!
나는 원래 좀.. 하지말라하는거 해봐야 직성 풀리는 타입이다.
서버에서 형태소 분석하는 방법은 알고 있고!
서버로 input 값을 넘기는 방법은 사실 모른다. (java 버전에서는 할줄 안다^^)
javascript -> python ??? 이 과정을 전혀 모른다!
여튼..
근데 javascript 위에서 형태소 분석기를 돌리는게 가능하다고 하는데, 단지 어렵다는 이유로 도전해보지 않는다면, 이건 내가 아니다... (💩인지 된장인지 먹어봐야하는 사람)
그래서 도전해보겠다. 이 새벽을 불태워보겠다.

https://koalanlp.github.io/nodejs-support/
https://github.com/koalanlp/nodejs-support

정말... 감사한 분들이다... 특히, 은전한닢 님에게 압도적 감사를 드린다. 나를 며칠동안 울게 만든 mecab 에 대한 고민을 해결하게 해준 분이기에...🥹


세상에... Java, Python, Node JS 위에서 다 돌아갈 수 있다니!!!!
이렇게 빛과 소금일 수가?
내가 분명 몇 일 전에 Node.js 를 깔았다. 근데 이유가 기억나지 않는다..
분명 어떠한 코드 구현 과정에서 깔아야했는데..ㅠㅠㅠ 점점 머리가 마비가 되고있다...
메멘토 수준이다..^^ 그래서 이렇게 의식의 흐름으로라도 적어놔야한다...
여튼! Node.js 가 필요하다. Node.js 가 뭔지부터 알아보겠다.

우선, 역시나 공식문서 를 먼저 살펴보자면..
비동기 이벤트 기반 JavaScript 런타임인 Node.js는 확장 가능한 네트워크 애플리케이션을 구축하도록 설계되었습니다. 다음 "hello world" 예제에서는 많은 연결을 동시에 처리할 수 있습니다. 연결될 때마다 콜백이 실행되지만 수행할 작업이 없으면 Node.js는 절전 모드로 전환됩니다.
흠... 와닿지가 않는다. 무슨 뜻이지?
결국 단순히 html 을 동적으로 돌리기위한 javascript 를 javascript 만으로 서버를 만들어서 프로그램도 만들 수 있는거다? 서버 엔진을 달고서 (태초에 크롬 V8 이 있었다)
https://codingapple.com/unit/nodejs-3-what-is-node-js/
아하. 이제서야 Node.js 공식 홈페이지의 대문에 걸려있던 문장이 이해가 된다.
설명을 너무 잘해주시네요... ㄷㄷ 👍🏼
https://velog.io/@remon/개발-기본-지식-Node.js란
이 설명도 너무 좋다!
그렇다면 결국... 형태소분석기를 돌리기 위해서는 서버가 필요하다는 뜻인걸까? node.js
혹시 최종적으로 아키텍쳐가 구성됐을때, 서버까지 연결됐을때 문제가 생길 수 있으니 챗GPT 에게 물어봤다..


흠 그러니까.. 충돌이 일어나지는 않을거다.
하지만, 챗GPT는 백엔드와 프론트엔드의 경계를 나와는 조금 다르게 두는걸 추천하는것 같다..
하 이게.. pororo 설치 실패부터 mecab 늪지대까지.. 뭔가 설치할 때마다 하루씩은 시간을 잡아먹으니..ㅠㅠ (쉽게 되지를 않는다 ..)
시작부터가 망설여지게 된다.. 섣불리 판단하고 행동할 수가 없게 됐다..
선생님에게 여쭤보고싶네....ㅠㅠ

그래. 그냥 input 값만 형태소 분석하는 건 node.js 서버로 따로 만들어보자.
찜찜한 키워드 :
싱글 스레드
우선 내 Node.js 버전 이다. v20.9.0.
지우고, 최신버전인 v20.10.0. LTS 를 설치했다.

choco install nodejs-lts --version 20.10.0 -y 을 했는데, 아래와 같이 에러 코드가 떴다.This may mean that a different user or administrator is holding this lock and that this process does not have permission to access it.


여기서 잠깐, $npm 이란? Node Package Manager
하... 근데.. .에러가떴다...

뭔가.. Java 에서 문제가 있는듯하다.
내 컴퓨터에 깔린 Java 버전을 확인해보겠다.. 난 Java 11 을 주로 썼었다.. 근데, 문제가 좀 있어서 python 배울때 지웠다가 다시 깐걸로 기억하는데....

1.8.0_382.... 흠.........

아니.. 내 JDK .. 뭐지?
결국.. 먼길 돌아서 zulu 다운로드 받으러 왔다..

(참고 : Windows, Zulu(OpenJDK 11) 설치하기)
cmd 창으로 확인하니..

환경 변수도... 확인하러...

헉.. 왜 jre 가 없지 ?


내가 잘못한게 아니다!!! JDK 안에 포함되어있는거다!!

하 다시...
나는 JAVA 를 제대로 깔았고, 환경변수도 제대로 잘 해주었다.
1. npm install --save core-js@^3 core.js 도 업그레이드 해주었다.
2. npm install -g node-gyp 도 했다. (참고 : https://yuhe-dogspaw.tistory.com/19)
3. npm install java 를 했다.
그랬더니....

이렇게 없다고 하고, 실제로도 node_modules 폴더안에 java 를 찾아볼수 없었는데,

드디어.. 이렇게 생겨있다.. 🥹
그러고 관리자권한실행으로 다시 npm install koalanlp --save 를 했더니..
또 에러다^^ 근데 아까와는 좀 다르게 생긴 에러파티였다!
4. npm install --global --production windows-build-tools 를 해줫더니?
또 에러다^^ 하 포기할까?
지금 거의 4시간째 이러고 있다..
노선을 바꿔서, 일단 node.js 를 실행해보려고 하는 중이다.


여기 글을 보며 따라하는중...

와우.. 신기하고 놀랍다..
결론은, 이 프로세스로 localhost://3000까지 열어보고 api 갖다 써보고 했지만,
여기서도 npm install koalanlp --save 은 실패했다.
너무... 지친다....ㅠㅠ.... 설치할때마다 매번 이렇게 진을 빼야하는걸까?

와.... ㅠㅠㅠㅎㅎㅎㅎㅎ 헛웃음이 나온다........
choco 에서 더이상 JDK11 버전은 지원하지 않는다.

찾았다.

koalaNlp 공식홈페이지에서 제시하는 명령어가 아니고, 위의 명령어를 쓰니 설치가 성공했다^^ 너무 빡친다!

https://community.chocolatey.org/packages/openjdk11/11.0.11.9
속상해 죽겠다.... 내 시간... 내 눈...

warn 다음에 처음으로 뜨는 에러코드 먼저 잡아볼거다.
node_modules 경로에 java 가 없다고 한다.
손수 만들어주려고 한다.


이렇게 생긴걸 확인했다.

내용물도 잘 들어가 있다.
환경변수를 다시 체크해주고... 그제서야 java version 이 11.0.11 로 되어있다..


명령프롬프트 관리자 창에서도 확인하니 드디어..ㅠㅠ
다시 차근차근해보자.

ㅎㅎㅎ 에러코드가 확 줄어들었다...^^!!!!!
다시 알아보겠다..

역시나 여기에 여전히 없다고 징징징.

C:\Windows\System32>npm install --save bcryptjs 을 하면

여기에 설치된다. 경로 그대로 설치된다는거임.
C:\Windows\System32>npm install --g bcryptjs --save 이렇게 -g를 붙이면?

전역에서 다 사용할 수 있도록 C:\Users\user\AppData\Roaming ~~ 경로에 설치가 된다.
python 2.x 버전으로 다운그레이드 해야된다는 소식을 듣고
npm 과 python2.x 버전을 맞춰주는 작업을 해주었다.

우선 npm 을 v8 으로 ungrade 해주었고,
npm config set python '내 경로' 로 맞춰주었다.
https://gseok.gitbooks.io/node-and-npm/content/node-npmc0ac-c6a9-c2dc-node-gyp-rebuild-error.html
이걸 보면서, 하나씩 해결하며,
C:\Windows\System32>npm config set msvs_version 2019 도 성공했다..!
계속 안된다..
pororo.. mecab... 그리고 koalaNlp 까지...
이렇게 형태소분석기 갖다 쓰는게 힘든일인가?
이제 설치가 무서워질 지경이다....
그래도... 오늘 삽질만 한 것은 아니라고 생각된다.
npm / -g 가 어떻게 붙느냐에 따라 달라지는 설치 경로..
등등... 디렉토리에 대해 좀 더 알게된 시간이었다...
너무 많은 시간이 들어갔고.. 해결을 못한게 아쉽지만....