เรากำลังจะเขียนชุดเครื่องมือบรรทัดคำสั่งง่ายๆเพื่อแสดงสถิติพื้นฐานเกี่ยวกับไฟล์ข้อความหรือชุดไฟล์ข้อความ สถิติพื้นฐานบางอย่างรวมถึง ...
เราจะทำงานเพื่อเพิ่มความสามารถในการ ...
นี่คือภาพหน้าจอของโปรแกรมที่ดาวน์โหลดข้อความ ทั้งหมด ของ Moby Dick จาก Project Gutenberg และพิมพ์ฮิสโตแกรมของความถี่ตัวอักษร
ปรากฎว่าตัวอักษร "T" คิดเป็น 9.25% ของตัวอักษรทั้งหมดใน Moby Dick
ในการเริ่มต้นคุณจะต้อง ...
npm install เพื่อติดตั้งแพ็คเกจที่ต้องการtextalyze.js เป็นซอร์สโค้ดสำหรับโครงการนี้sample_data เป็นไดเรกทอรีที่มีไฟล์ข้อความตัวอย่างเพื่อวิเคราะห์ส่วนใหญ่มาจาก Project Gutenberg ไฟล์ textalyze.js ที่มาพร้อมกับที่เก็บนี้เต็มไปด้วยความคิดเห็นที่ออกแบบมาเพื่อช่วยให้คุณเริ่มต้นใช้งาน คุณควรรู้สึกอิสระที่จะลบออกเพื่อให้โปรแกรมอ่านง่ายขึ้น
คิดเกี่ยวกับคำถามที่คุณต้องตอบเพื่อให้มันใช้งานได้:
คำถามเหล่านี้เรียกใช้ขอบเขตเสียงจากทับทิม Nitty-Gritty ไปจนถึงประสบการณ์ผู้ใช้ในขณะเดียวกันก็เริ่มต้นเส้นทางของการกลายเป็นความสะดวกสบายกับวิธีการทำงานของเว็บ
หากต้องการขอข้อเสนอแนะเกี่ยวกับรหัสของคุณให้ใช้กระบวนการ GitHub Flow มาตรฐาน
โครงการนี้มีโครงสร้างเป็นลำดับของการวนซ้ำซึ่งแต่ละโครงการสร้างขึ้นจากการทำซ้ำก่อนหน้านี้ การทำซ้ำมีบทบาทสำคัญสามประการ:
การใช้ตัวอย่างที่ใช้รหัสยากเขียนฟังก์ชั่นที่ใช้ 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 โดยพลการ-อาจมีช่องว่าง, เครื่องหมายวรรคตอน, ตัวแบ่งบรรทัด ฯลฯ-และส่งคืนสตริง "sanitized" ที่แทนที่ตัวอักษรตัวพิมพ์ใหญ่ทั้งหมดด้วยกรณีที่ต่ำกว่า สิ่งนี้จะช่วยให้มั่นใจได้ว่าตัวอักษร '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 } บ่อยครั้งข้อมูลที่เราต้องการไม่ได้อยู่ในรูปแบบที่ทำให้ง่ายต่อการวิเคราะห์ กระบวนการของการใช้ข้อมูลที่จัดรูปแบบไม่ดีและเปลี่ยนเป็นสิ่งที่เราสามารถใช้ประโยชน์ได้เรียกว่า sanitizing ข้อมูลของเรา
สิ่งที่นับว่าเป็น "การฆ่าเชื้อ" แตกต่างกันไปขึ้นอยู่กับข้อมูลพื้นฐานและความต้องการของเรา ตัวอย่างเช่นหากเราต้องการดูข้อความทั้งหมดในเอกสาร HTML เราไม่ต้องการนับแท็ก HTML ทั้งหมด ในทางกลับกันหากเราต้องการรายงานเกี่ยวกับแท็กที่ใช้บ่อยที่สุดในเอกสาร HTML เราต้องการ เก็บ แท็ก แต่ลบข้อความ
ในกรณีของเราเราได้ออกแบบโปรแกรมของเราซึ่งถือว่าเป็นตัวอักษรตัวพิมพ์ใหญ่และตัวอักษรตัวพิมพ์เล็กเป็นตัวอักษรที่แตกต่างเช่น Object ผลลัพธ์ของเราอาจมี
{ 'a' : 20 , 'A' : 5 }แต่เราอาจจะค่อนข้างมีอยู่
{ 'a' : 25 }ในทำนองเดียวกันเราอาจไม่สนใจเกี่ยวกับเครื่องหมายวรรคตอน (ช่วงเวลา, เครื่องหมายจุลภาค, ยัติภังค์, colons, ฯลฯ ) แม้ว่ามันจะยากที่จะจัดการกับความแตกต่างระหว่างตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก
ที่เก็บฐานมีไดเรกทอรีที่เรียกว่า 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 ) แทนที่จะเป็นเพียงความถี่ตัวอักษร
เพิ่มการสนับสนุนสำหรับการส่งออกข้อมูลในรูปแบบที่คุณสามารถโหลดลงใน Excel เช่นไฟล์ CSV คุณสามารถติดตั้งและใช้โมดูล CSV-Writer เพื่อทำสิ่งนี้
ค้นหาข้อความจากหลายภาษาและเปรียบเทียบความถี่ตัวอักษรระหว่างภาษา ความถี่ตัวอักษรของภาษาทำหน้าที่เป็นลายนิ้วมือและคุณจะประหลาดใจกับการระบุข้อความเพียงเล็กน้อยในการระบุภาษาเมื่อคุณรู้ความถี่ตัวอักษร
ใช้ไลบรารีแผนภูมิเช่น Anychart เพื่อส่งออกฮิสโตแกรมกราฟิก
ในการติดตั้งโมดูลให้เรียกใช้คำสั่งต่อไปนี้ (แทนที่ nameOfModule ด้วยชื่อของโมดูลที่ต้องการ):
npm install --save nameOfModule สิ่งนี้จะอัปเดต package.json และเพิ่มโมดูลเป็นการพึ่งพา อ่านเอกสารของแต่ละโมดูลเพื่อดูวิธี require และใช้งาน