검색
검색
공개 노트 검색
회원가입로그인

markdown parser underline 만들기 (feat. chatgpt)

underline 태그를 도입했는데 마크다운 파서 만드는 일을 chatgpt에게 시켜 보았다.

1차

underline 파싱을 하는데 파싱한 부분의 순서를 지키지 않았다.

그래서 잘라내는 텍스트의 순서를 보존해달라고 해서 두 번째 파서를 써달라고 했다.

2차

이번에는 하나의 inline block 에 여러개의 u tag가 있는 경우 파싱하지 못했다.

그래서 그냥 내가 수동으로 짰다. ㅠㅠ 핵심 개념은 u tag가 있을 때 여러개가 있다면 잘라서 각자 토큰을 만들어 주는 것이다. 나는 파싱할 때 markdown-it을 사용하고 있다.

md.core.ruler.before("inline", "underline", (state) => {
  let tokens = state.tokens;
  let Token = state.Token;
  for (let i = 0; i < tokens.length; i++) {
    if (tokens[i].type === "inline") {
      let content = tokens[i].content;
      // check if there is an underline
      if (/<u>([^<]+)<\/u>/g.test(content)) {
        // remove tokens[i] from the tokens array
        tokens.splice(i, 1); // 원래 인라인 토큰은 지워준다.
        // split the content into an array of tokens
        let split = content.split(/\<u>/g);
        // loop through the array of tokens
        for (let j = 0; j < split.length; j++) {
          // if the token is not an underline, push it to the tokens array
          if (!/<\/u>/g.test(split[j])) {
            let textToken = new Token();
            textToken.type = "text";
            textToken.content = split[j];
            tokens.splice(i, 0, textToken);
            i++;
          } else {
            // if the token is an underline, split it into an array of tokens
            split[j] = split[j].split(/<\/u>/g);
            // push the first token to the tokens array
            let headToken = new Token();
            headToken.type = "underline_open";
            headToken.tag = "u";
            headToken.content = "";
            headToken.nesting = 1;
            headToken.attrs = null;
            headToken.map = null;
            tokens.splice(i, 0, headToken);
            i++;
            let middleToken = new Token();
            middleToken.type = "text";
            middleToken.content = split[j][0];
            // tokensArray.push(middleToken);
            tokens.splice(i, 0, middleToken);
            i++;
            let tailToken = new Token();
            tailToken.type = "underline_close";
            tailToken.tag = "u";
            tailToken.content = "";
            tailToken.nesting = -1;
            tailToken.attrs = null;
            tailToken.map = null;
            tokens.splice(i, 0, tailToken);
            i++;
            // if there is a second token, push it to the tokens array
            if (split[j][1]) {
              let afterToken = new Token();
              afterToken.type = "text";
              afterToken.content = split[j][1];
              tokens.splice(i, 0, afterToken);
              i++;
            }
          }
        }
      }
    }
  }
});

그래도 chatgpt로 짜서 좋았던 점은 만능은 아니지만 그래도 내가 모르는 영역일 경우 이를 바탕으로 배워서 빠르게 이해하고 로직을 구현할 수 있다는 점이다.

chatgpt에게 대략적인 논리 구현을 맡기고 세부 구현은 사람이 하는 방식의 일을 많이 하게 될 것 같다. 머신러닝의 특성 상 100% 정확률을 보장할 수 없다는 것인데 이건 꽤 오랫동안 바뀌지 않을거 같다. 머신 러닝을 만든 사람들도 그 내부에서 무엇이 일어나는지 정확하게 모른다. 그냥 결과론적으로 맞다는 것을 알고 있는 정도이다. 마치 양자역학처럼 사용은 하지만 정확하게 그게 어떻게 그렇게 되는지 모른다.

그래도 확실한 것은 인간이 예전에 못하던 영역의 일을 보다 쉽게 할 수 있게 됐다는 것이다. 이런 도구의 출현은 스마트폰 이후 진짜 오랜만이다. 생산성의 향상을 직접적으로 증가시켜주는 도구이다.

인공지능이 사람의 일을 대체할까에 대해서는 아마도이다. 생산성이 1.5배 증가한다고 봤을 때 사람이 대체될까? 내가 봤을 때는 사람이 일을 하는 것은 더 이상 생산성과 직접적인 연관이 없다. 현대 사회에서 사람의 고용 여부는 대부분 자본이 결정한다. 그리고 만약 자동화나 인공지능이 사람의 일을 대체한다고 해서 인간이 일을 하지 않을까? 물론 그렇게 되면 좋겠지만 인간은 다른 일을 만들어내서라도 하고 이를 통해 또 자원의 분배를 하게 될 것이다. 그래서 이 이슈는 그렇게 중요할까? 라는 생각이 든다.

또 이야기가 다른 곳으로 빠졌는데 인공지능에 대해서 요즘 진짜 관심이 많다. 나중에 한 번 자세하게 다루어보고 싶다.

결론은 underline 파서를 만들었다는 이야기입니다...^^;

조회수 : 335
heart
공유하기
카카오로 공유하기
페이스북 공유하기
트위터로 공유하기
url 복사하기
T
페이지 기반 대답
AI Chat