public static IEnumerable <WordData> ReadWordData(this RawDataReader reader, int count)
        {
            while (count > 0)
            {
                // Given this particular set of input data, among
                // capacity values from 1 to 31, benchmarking found 21
                // optimal for computation time.
                //
                // In comparison, a default capacity of 21 is about 7%
                // and 13.5% more efficient than 16 (StringBuilder's
                // default capacity) and 31 (input data's max length),
                // respectively.
                //
                // However, the actual impact is a neglectable, 0.1
                // millisecond difference on Intel Core i7-6700.
                const int optimalCapacity = 21;

                var line = new StringBuilder(reader.ReadLine(), optimalCapacity);
                while (!char.IsDigit(line[line.Length - 1]))
                {
                    line.Append(Program.Delimiter);
                    line.Append(reader.ReadLine());
                }

                var tokens = line.ToString().Split(Program.Delimiter);
                yield return(new(tokens[0], tokens[1], tokens[2]));

                --count;
            }
        }
        static void Main(string[] arguments)
        {
            switch (arguments.Length)
            {
            case 0: throw new ArgumentException($"Missing {nameof(arguments)}[0]: input-file-path.", nameof(arguments));

            case 1: throw new ArgumentException($"Missing {nameof(arguments)}[1]: output-file-path.", nameof(arguments));
            }

            var inputFilePath = arguments[0];
            var inputReader   = new RawDataReader(inputFilePath);

            const int knownWordDataCount = 6012;
            var       wordDataList       = new List <WordData>(knownWordDataCount);

            {
                inputReader.SkipLineWhile(line => !line.StartsWith("依字母排序 A"));
                inputReader.SkipLine(); // Line 6409: 依字母排序 A
                wordDataList.AddRange(inputReader.ReadWordData(113));
                inputReader.SkipLine(); // Line 6638: 高中英文參考詞彙表
                inputReader.SkipLine(); // Line 6639: 54
                wordDataList.AddRange(inputReader.ReadWordData(119));
                inputReader.SkipLine(); // Line 6760: 依字母排序 A
                inputReader.SkipLine(); // Line 6761: 55
                wordDataList.AddRange(inputReader.ReadWordData(119));
                inputReader.SkipLine(); // Line 6882: 高中英文參考詞彙表
                inputReader.SkipLine(); // Line 6883: 56
                wordDataList.AddRange(inputReader.ReadWordData(40));
                inputReader.SkipLine(); // Line 6924: B
                wordDataList.AddRange(inputReader.ReadWordData(78));
                inputReader.SkipLine(); // Line 7004: 依字母排序 B
                inputReader.SkipLine(); // Line 7005: 57
                wordDataList.AddRange(inputReader.ReadWordData(120));
                inputReader.SkipLine(); // Line 7126: 高中英文參考詞彙表
                inputReader.SkipLine(); // Line 7127: 58
                wordDataList.AddRange(inputReader.ReadWordData(114));
                inputReader.SkipLine(); // Line 7242: C
                wordDataList.AddRange(inputReader.ReadWordData(5));
                inputReader.SkipLine(); // Line 7248: 依字母排序
                inputReader.SkipLine(); // Line 7249: C
                inputReader.SkipLine(); // Line 7250: 59
                wordDataList.AddRange(inputReader.ReadWordData(113));

                {
                    // Line 7477

                    // chairperson/chair/
                    // chairman/
                    // chairwoman n.
                    // 6

                    var line   = string.Concat(inputReader.ReadLine(3));
                    var tokens = line.Split(Delimiter);
                    var level  = inputReader.ReadLine();
                    wordDataList.Add(new(tokens[0], tokens[1], level));
                }

                wordDataList.AddRange(inputReader.ReadWordData(4));
                inputReader.SkipLine(); // Line 7489: 高中英文參考詞彙表
                inputReader.SkipLine(); // Line 7490: 60
                wordDataList.AddRange(inputReader.ReadWordData(120));
                inputReader.SkipLine(); // Line 7611: 依字母排序 C
                inputReader.SkipLine(); // Line 7612: 61
                wordDataList.AddRange(inputReader.ReadWordData(120));
                inputReader.SkipLine(); // Line 7733: 高中英文參考詞彙表
                inputReader.SkipLine(); // Line 7734: 62
                wordDataList.AddRange(inputReader.ReadWordData(55));

                {
                    // Line 7790

                    // congressman/
                    // congresswoman n. 6

                    var line   = string.Concat(inputReader.ReadLine(2));
                    var tokens = line.Split(Delimiter);
                    wordDataList.Add(new(tokens[0], tokens[1], tokens[2]));
                }

                wordDataList.AddRange(inputReader.ReadWordData(63));
                inputReader.SkipLine(); // Line 7855: 依字母排序 C
                inputReader.SkipLine(); // Line 7856: 63
                wordDataList.AddRange(inputReader.ReadWordData(120));
                inputReader.SkipLine(); // Line 7977: 高中英文參考詞彙表
                inputReader.SkipLine(); // Line 7978: 64
                wordDataList.AddRange(inputReader.ReadWordData(56));
                inputReader.SkipLine(); // Line 8091: D
                wordDataList.AddRange(inputReader.ReadWordData(63));
                inputReader.SkipLine(); // Line 8218: 依字母排序 D
                inputReader.SkipLine(); // Line 8219: 65
                wordDataList.AddRange(inputReader.ReadWordData(120));
                inputReader.SkipLine(); // Line 8340: 高中英文參考詞彙表
                inputReader.SkipLine(); // Line 8341: 66
                wordDataList.AddRange(inputReader.ReadWordData(119));
                inputReader.SkipLine(); // Line 8462: 依字母排序 E
                inputReader.SkipLine(); // Line 8463: 67
                wordDataList.AddRange(inputReader.ReadWordData(73));
                inputReader.SkipLine(); // Line 8538: E
                wordDataList.AddRange(inputReader.ReadWordData(45));
                inputReader.SkipLine(); // Line 8584: 高中英文參考詞彙表
                inputReader.SkipLine(); // Line 8585: 68
                wordDataList.AddRange(inputReader.ReadWordData(120));
                inputReader.SkipLine(); // Line 8706: 依字母排序 F
                inputReader.SkipLine(); // Line 8707: 69
                wordDataList.AddRange(inputReader.ReadWordData(111));
                inputReader.SkipLine(); // Line 8820: F
                wordDataList.AddRange(inputReader.ReadWordData(7));
                inputReader.SkipLine(); // Line 8828: 高中英文參考詞彙表
                inputReader.SkipLine(); // Line 8829: 70
                wordDataList.AddRange(inputReader.ReadWordData(120));
                inputReader.SkipLine(); // Line 8950: 依字母排序 F
                inputReader.SkipLine(); // Line 8951: 71
                wordDataList.AddRange(inputReader.ReadWordData(120));
                inputReader.SkipLine(); // Line 9072: 高中英文參考詞彙表
                inputReader.SkipLine(); // Line 9073: 72
                wordDataList.AddRange(inputReader.ReadWordData(22));
                inputReader.SkipLine(); // Line 9118: G
                wordDataList.AddRange(inputReader.ReadWordData(97));
                inputReader.SkipLine(); // Line 9313: 依字母排序 H
                inputReader.SkipLine(); // Line 9314: 73
                wordDataList.AddRange(inputReader.ReadWordData(74));
                inputReader.SkipLine(); // Line 9389: H
                wordDataList.AddRange(inputReader.ReadWordData(45));
                inputReader.SkipLine(); // Line 9435: 高中英文參考詞彙表
                inputReader.SkipLine(); // Line 9436: 74
                wordDataList.AddRange(inputReader.ReadWordData(12));

                {
                    // Line 9449

                    // he (him, his, himself)
                    // pron. 1

                    var word   = inputReader.ReadLine();
                    var line   = inputReader.ReadLine();
                    var tokens = line.Split(Delimiter);
                    wordDataList.Add(new(word, tokens[0], tokens[1]));