텍스트 파일 또는 텍스트 파일 세트에 대한 기본 통계를 표시하기 위해 간단한 명령 줄 도구 세트를 작성하겠습니다. 일부 기본 통계에는 ...
우리는 또한 능력을 더하기 위해 노력할 것입니다.
다음은 Project Gutenberg에서 Moby Dick의 전체 텍스트를 다운로드하고 문자 빈도의 히스토그램을 인쇄하는 프로그램의 스크린 샷입니다.
문자 "T"는 Moby Dick의 모든 편지의 9.25%를 구성하는 것으로 나타났습니다.
시작하려면 ...
npm install 실행하십시오.textalyze.js 는이 프로젝트의 소스 코드입니다sample_data 는 주로 Project Gutenberg에서 분석 할 샘플 텍스트 파일을 포함하는 디렉토리입니다. 이 저장소와 함께 제공되는 textalyze.js 파일에는 시작하는 데 도움이되는 주석이 가득합니다. 프로그램을보다 쉽게 읽을 수 있도록 자유롭게 삭제해야합니다.
그러나 작동하기 위해 대답 할 수있는 질문에 대해 생각해보십시오.
이 질문들은 Nitty Gritty Ruby에서 사용자 경험에 이르기까지 영역을 실행하면서 웹의 작동 방식에 익숙해지는 길을 시작했습니다.
코드에 대한 피드백을 요청하려면 표준 Github 흐름 프로세스를 사용하십시오.
이 프로젝트는 일련의 반복 시퀀스로 구성되며 각 프로젝트는 이전 반복을 기반으로합니다. 반복은 세 가지 중요한 역할을 수행합니다.
하드 코딩 된 예제를 사용하여 임의적이고 복제 된 항목이 포함 된 Array 입력으로 가져오고 항목/카운트 쌍을 포함하는 Object 반환하는 함수를 작성하십시오. 우리는 일부를 썼습니다
이 반복에는 테스트가 작성되었습니다. 달리다
npm test 실패한 테스트를보기 위해. npm install 먼저 실행하는 것을 잊지 마십시오!
즉, 입력에 100 개의 항목이 있고 그 중 20 개가 문자 "a"인 경우 결과 Object 포함해야합니다.
{ 'a' : 20 } "Sensible"은 정의하기 위해 귀하에게 달려 있지만 여기에 제안 된 형식이 있습니다. 입력을 ["a", "a", "a", "b", "b", "c"] 로 하드 코딩하는 척하는 경우가 있습니다.
user@host project-js-textalyze $ node textalyze.js
The counts for ["a", "a", "a", "b", "b", "c"] are...
a 3
b 2
c 1
user@host project-js-textalyze $
하드 코딩 된 예제를 사용하여 임의의 String 입력으로 가져 와서 공백 및 구두점을 포함하여 문자열의 모든 문자 Array 반환하는 함수를 작성하십시오.
이것을 이전 반복에서 배열 카운팅 함수에 공급하여 문자/카운트 쌍을 포함하는 Object 를 얻으십시오. 이 쌍을 현명한 방식으로 인쇄하십시오.
파일 lib/sanitize.js 파일을 만들고 내부에 sanitize 라는 기능을 정의하십시오. lib/itemCounts.js 에서와 같이 마지막 줄은 있어야합니다
module . exports = sanitize sanitize 함수는 아마도 공백, 구두점, 라인 브레이크 등을 포함하는 임의의 String 가져 와야하며 모든 상부 신자 문자를 소문자로 대체하는 "소독제"문자열을 반환해야합니다. 이것은 우리가 텍스트를 분석 할 때 문자 'A' 와 'a' 두 개의 별개의 문자로 취급되지 않도록합니다. 우리는 나중에 반복하여 구두점 및 기타 비트를 처리 할 것입니다.
이렇게 작동해야합니다
sanitize ( 'This is a sentence.' ) // => 'this is a sentence.'
sanitize ( 'WHY AM I YELLING?' ) // => 'why am i yelling?'
sanitize ( 'HEY: ThIs Is hArD tO rEaD!' ) // => 'hey: this is hard to read!'운 좋게도 JavaScript에는 String.prototype.tolowerCase를 도와주는 내장 기능이 제공됩니다.
이 기능을 현재 프로그램에 통합하여 결과의 Object 에 포함되도록
{ 'a' : 25 }대신
{ 'a' : 19 , 'A' : 6 } 종종 우리가 원하는 데이터는 쉽게 분석 할 수있는 형식이 아닙니다. 형성되지 않은 데이터를 취하고이를 우리가 사용할 수있는 것으로 변환하는 과정을 데이터 소독이라고합니다.
"소독"으로 간주되는 것은 기본 데이터와 요구에 따라 다릅니다. 예를 들어, HTML 문서의 모든 텍스트를보고 싶다면 모든 HTML 태그를 계산하고 싶지 않습니다. 반대로 HTML 문서에서 가장 일반적으로 사용되는 태그에 대한 보고서를 원한다면 태그를 유지 하지만 텍스트를 제거하려고합니다.
우리의 경우, 우리는 프로그램을 설계하여 상류 문자와 소문자를 고유 한 글자로 취급 할 수 있도록 프로그램을 설계했습니다. 즉, 결과 Object 는
{ 'a' : 20 , 'A' : 5 }그러나 우리는 아마도 오히려 그것이 포함되어있을 것입니다
{ 'a' : 25 }마찬가지로, 우리는 아마도 구두점 (기간, 쉼표, 하이픈, 콜론 등)에 대해 신경 쓰지 않을 것입니다.
기본 저장소에는 소수의 텍스트 파일이 포함 된 sample_data 라는 디렉토리가 포함되어 있습니다. 이 파일 중 하나의 이름을 프로그램에 하드 코딩하고 해당 파일의 내용을 문자열로 읽으십시오. 해당 문자열을 현재 프로그램에 전달하여 이제 이전 반복에 있었던 하드 코딩 문자열 대신 해당 특정 파일의 문자 수 통계를 인쇄하도록하십시오.
파일의 내용을 문자열로 읽으려면 fs.ReadFile 및 fs.ReadFilesync를 참조하십시오.
우리는 데이터를 읽고있는 파일을 변경해야 할 때마다 JavaScript 코드를 편집하고 싶지 않습니다. 프로그램을 실행하는 사용자가 읽을 파일의 이름으로 전달할 수 있도록 변경하겠습니다. 명령 줄 인수를 사용하여이를 수행하겠습니다.
이 반복은 우리 프로그램의 v1.0입니다. 우리의 프로그램은 제한적이지만 다른 사람에게 줄 수있을 정도로 자체 포함되어 있으며 JavaScript 코드를 편집하는 방법을 모르고 의도하지 않고 사용할 수 있습니다.
축하해요!
터미널에서 실행되는 다음 명령을 고려하십시오.
node some-program.js first_argument second_argument banana
명령 줄 인수는 first_argument , second_argument 및 banana 이며 각 인수 사이의 분리를 나타내는 공간이 있습니다. first_argument 는 첫 번째 명령 줄 인수이며 banana 세 번째 명령 줄 인수입니다.
하드 코딩 된 예제를 사용하여 임의적이고 복제 된 항목을 포함하는 Array 입력으로 가져오고 항목/주파수 쌍을 포함하는 Object 반환하는 함수를 작성하십시오. 이 쌍을 현명한 방식으로 인쇄하십시오.
즉, 입력에 100 개의 항목이 있고 20 개의 문자 "A"가있는 경우 반환 된 Object 가
{ 'a' : 0.20 } 이미 Array 가져와 입력/카운트 쌍을 포함하는 Object 반환하는 함수를 작성했으며 전체 주파수를 계산하려면 이러한 카운트 (한 가지 방법)가 필요합니다. 직접 스트레칭하려면 "주파수 통계"기능을 "카운팅 통계"기능을 사용하는 방식으로 작성하여 프로그램에서 많은 코드 나 작업을 복제 할 필요가 없습니다.
이것은 "스트레치 접근법"입니다. 즉, 이런 식으로 프로그램을 작성할 필요는 없습니다 . 우리가 말했듯이, "더 나은", "더 빠른", "더 우아한"등을 퍼즐로 만들려고하는 동안 무언가를 쓰고 피드백을 얻는 것이 훨씬 낫습니다.
다음과 같은 모습을 보이는 문자 주파수의 히스토그램을 인쇄하십시오.
목표는 유용하고 잘 설계된 출력을 생성하는 것입니다. 위의 출력과 동일하게 보일 필요는 없습니다.
힌트 : 히스토그램의 길이를 확장하는 방법으로 각 항목의 주파수를 사용할 수 있습니다.
추가 할 수있는 추가 기능은 다음과 같습니다.
요청 모듈을 설치하고 사용하여 파일 이름뿐만 아니라 URL 전달에 대한 지원을 추가하십시오. 예를 들어, 먼저 Moby Dick을 다운로드하지 않고 실행할 수 있습니다.
node textalyze.js http://www.gutenberg.org/cache/epub/2701/pg2701.txt 글자 주파수 대신 5 (또는 N ) 가장 일반적인 단어를 표시하기위한 지원을 추가하십시오.
CSV 파일과 같이 Excel에로드 할 수있는 형식으로 데이터 내보내기에 대한 지원을 추가하십시오. CSV 작성자 모듈을 설치하고 사용하여이를 수행 할 수 있습니다.
여러 언어에서 텍스트를 찾고 언어 간 문자 빈도를 비교하십시오. 언어의 문자 빈도는 일종의 지문으로 작용하며, 문자 빈도를 알면 언어를 식별하는 데 얼마나 적은 텍스트가 필요한지 놀랐습니다.
그래픽 히스토그램을 내보내려면 차트와 같은 차트 라이브러리를 사용하십시오.
모듈을 설치하려면 다음 명령을 실행하십시오 (이름이 원하는 모듈의 이름으로 nameOfModule 대체) :
npm install --save nameOfModule 이것은 package.json 업데이트하고 모듈을 종속성으로 추가합니다. 각 모듈의 설명서를 읽고 require 하고 사용하는 방법을 확인하십시오.