Mình còn nhớ có một lần đọc được đâu đó ở trên mạng, một người nói tiếng Anh là tiếng mẹ đẻ sẽ biết được khoảng 20.000 đến 30.000 từ vựng tùy thuộc vào học vấn của họ nhưng phần lớn chỉ sử dụng 3.000 từ vựng thông dụng hàng ngày. Mình thì hơi tò mò về cái câu nói này nên có ý tưởng thử đếm từ vựng tiếng Anh có trong một vài bộ phim xem sao.
Để làm được điều này, mình sẽ sử dụng file .SRT, một file phụ đề cho phim rất thông dụng. Với nhiều bạn thường xuyên download phim trên mạng về thì chắc chắn không lạ gì với việc download file này để xem phụ đề cùng với phim rồi. Mình đã viết một cái Console App nho nhỏ bằng C# để đếm số lượng từ vựng trong file SRT.
C# Console App
Nếu bạn là C# developer thì có thể xem mục này và copy code chạy thử còn không bạn có thể nhảy sang xem phần kết quả bên dưới.
Trong project mình đã copy thử 30 file SRT của 30 bộ phim để thử nghiệm. Các bạn có thể thấy project của mình vô cùng đơn giản như hình bên dưới. Với 30 bộ phim, mình tạm chia thành 6 thể loại là: Action (Hành động), Children (phim cho trẻ em), Drama (những phim tâm lý xã hội), Horror (phim kinh dị), SciFi (phim khoa học viễn tưởng), Teenagers (phim cho lứa tuổi teen).
Còn đây là hàm Main của file Program.cs
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text.RegularExpressions; namespace ConsoleApp1 { class Program { static void Main(string[] args) { // Need to set Srt files' properties to be Content and Copy if newer foreach (string path in Directory.GetFiles("SrtFiles", "*.srt")) { var data = new List<string>(); string inputText = File.ReadAllText(path); string fileName = Path.GetFileName(path); string[] souceSrt = Regex.Split(inputText, @"(?:\r?\n)*\d+\r?\n\d{2}:\d{2}:\d{2},\d{3} --> \d{2}:\d{2}:\d{2},\d{3}\r?\n"); foreach (var item in souceSrt) { //Get IEnumerable of words var words = from Match match in Regex.Matches(item, @"\b\S+\b") select match.Value; data.AddRange(words.Select(x => x.ToLower())); } var result = new List<string>(); foreach (var line in data.Distinct().GroupBy(info => info) .Select(group => new { Word = group.Key, Count = group.Count() }) .OrderByDescending(x => x.Count)) { result.Add(line.Word); } Console.WriteLine($"{fileName}: {result.Count}"); } Console.ReadKey(); } } }
Trong đoạn code trên, mình đọc toàn bộ các file SRT có trong thư mục SrtFiles, và trong vòng lặp foreach, mình lần lượt phân tích từng file. Các bạn có thể thấy, mình đọc hết toàn bộ text trong file SRT, sau đó sử dụng một đoạn Regex để đọc ra từng dòng trong file. Mỗi phần tử của mảng tên sourceSrt sẽ chứa một dòng hội thoại. Tiếp theo mình sẽ tách từng từ của từng dòng để add nó vào biến tên data. Lúc này biến data sẽ chứa tất cả các từ có trong file SRT. Tuy nhiên sẽ có rất nhiều từ trùng lặp, ví dụ như “you” hay “the” sẽ xuất hiện rất nhiều lần. Do đó, mình sẽ gộp nó lại và chỉ tính như vậy là một từ. Cuối cùng mình sẽ in ra kết quả.
Mình đặt tên các file SRT gồm có thể loại phim và năm như vậy để dễ phân loại, trong cái Console App mình viết thì cũng không có nhiều ý nghĩa, thực tế sau đó mình có sử dụng app này viết một pet project hoàn chỉnh vừa để học ASPNET 5 vừa để có một giao diện đẹp đẽ hơn.
Nếu các bạn tò mò có thể vào xem project trên Github của mình. Project này là web chứ không phải đoạn code Console App phía trên nhé. Bạn nào muốn thử nhanh chỉ việc copy đoạn code trên và run. Riêng 30 cái file SRT kia thì các bạn vào link dưới tìm trong thư mục SrtWordCount.ConsoleApp nhé.
thanhduc-nguyen/SrtWordCount: Count words in Srt files. (github.com)
Kết quả
Sau khi mình chạy chương trình, kết quả thu được của mình khá thú vị.
[Action] John Wick 2014.srt: 940
[Action] Mission Impossible Fallout 2018.srt: 1454
[Action] Rush Hour 1998.srt: 1460
[Action] The Expendables 2010.srt: 1355
[Action] The Marksman 2021.srt: 966
[Children] Despicable Me 2010.srt: 1099
[Children] Minions 2015.srt: 1298
[Children] Sing 2016.srt: 1598
[Children] The Boss Baby 2017.srt: 1369
[Children] The Grinch 2018.srt: 1471
[Drama] 500 Days of Summer 2009.srt: 1559
[Drama] Definitely Maybe 2008.srt: 1951
[Drama] Hitch 2005.srt: 1810
[Drama] La La Land 2016.srt: 1317
[Drama] Me Before You 2016.srt: 1667
[Horror] Annabelle 2017.srt: 760
[Horror] Ghost Ship 2002.srt: 1224
[Horror] I Still See You 2018.srt: 1158
[Horror] Rings 2017.srt: 909
[Horror] The Conjuring 2013.srt: 1214
[SciFi] Aliens 1986.srt: 3072
[SciFi] Back to the Future 1985.srt: 1557
[SciFi] Interstellar 2014.srt: 2075
[SciFi] Jurassic Park 1993.srt: 1853
[SciFi] The Matrix 1999.srt: 1293
[Teenagers] A Cinderella Story 2004.srt: 1611
[Teenagers] High School Musical 2006.srt: 1730
[Teenagers] Love Simon 2018.srt: 1886
[Teenagers] Mean Girls 2004.srt: 1862
[Teenagers] Raise Your Voice 2004.srt: 1366
Với kết quả trên, các bạn có thể thấy, phim Annabelle là phim có số lượng từ vựng được sử dụng ít nhất với 760 từ. Và nhìn chung thì những phim kinh dị hay hành động thường sử dụng ít từ vựng nhất với trên dưới 1000 từ. Có lẽ những bộ phim như thế này có lẽ thiên về hành động và gào thét hơn là nói chuyện.
Phim có lượng từ vựng nhiều nhất là Aliens với 3072 từ. Và dòng phim khoa học viễn tưởng cũng là dòng phim sử dụng nhiều từ vựng nhất. Mình chọn thống kê một vài phim thuộc thể loại trẻ em, tuổi teen hay phim xã hội bởi theo mình, nó phản ánh ngôn ngữ được sử dụng trong cuộc sống hàng ngày bên Mỹ. Và những phim như thế này thường sử dụng khoảng 1000 đến 2000 từ vựng.
Trong project web mà mình đề cập ở phần trước, mình có thống kê chi tiết tần suất sử dụng từ vựng trong phim. Các bạn có thể nhìn ảnh dưới.
Trong project này, mình thống kê được khá chi tiết cho từng phim. Và mình thấy là phần lớn các từ đều rất cơ bản và quen thuộc. Ngoài những phim khoa học thì những bộ phim còn lại lượng từ vựng cơ bản cá nhân mình biết đều lên tới 96,69%. Mình tin rằng phần lớn mọi người học tiếng anh sẽ thấy như vậy. Do đó, nếu các bạn cảm thấy khó khăn trong việc nghe hiểu những phim về chủ đề gia đình, bạn bè, nhà trường hay tâm lý xã hội, có lẽ bạn đang học quá nhiều tiếng anh học thuật mà bỏ qua tiếng anh thực tế.
Bài học rút ra
Qua thử nghiệm này, mình nhận thấy lượng từ vựng tiếng Anh được sử dụng trong phim thực tế ít hơn nhiều so với những gì mình học, các câu được sử dụng trong phim cũng vô cùng đơn giản. Các bạn cũng không cần phải quá tập trung học nhiều từ vựng hay những gì phức tạp như IELTS hay TOEFL (nếu như không có nhu cầu du học). Mọi người chỉ cần tập trung vào tiếng Anh cơ bản, và sử dụng thành thạo nó, như vậy bạn đã có thể tự tin sử dụng tiếng Anh cho nhu cầu hàng ngày.
Nói về học chắc và nắm vững những gì là cơ bản, mình thấy phương pháp Effortless English mà mình theo đuổi rất phù hợp với mục tiêu này. Sau khi mình học thì thấy khả năng nghe hiểu các bộ phim và giao tiếp của mình tăng lên rất nhiều. Nếu các bạn chưa từng nghe qua thì rất nên thử.
E chia sẻ bài viết này lên fb e nhé, lâu lâu rảnh rổi vẫn lên xem a có bài viết nào không. E nhắc lại câu nói của a nhé ” Hãy kiên trì rồi nhất định bạn sẽ nói được tiếng anh lưu loát , đừng vội vàng học 1 bài 1 tháng cũng được”
Dạo này anh cũng bận nên thi thoảng mới viết được. Đợt này rảnh hơn sẽ viết nhiều hơn nhé. 😀