中文詞彙學習法 -- C# 程式

程式作品

C 語言

Java

C#

JavaScript

常用函數

文字處理

遊戲程式

衛星定位

系統程式

資料結構

網路程式

自然語言

人工智慧

機率統計

資訊安全

等待完成

訊息

相關網站

參考文獻

最新修改

簡體版

English

專案下載:WordLearner.zip

執行結果

G:\csharp\WordLearner>csc WordLearner.cs
Microsoft (R) Visual C# 2010 編譯器版本 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.

G:\csharp\WordLearner>WordLearner Story.txt
4(來的)3
5(的鈔票)5
11(鈔票)16
2(是一個)2
4(一個)5
3(信仰)2
3(的國)3
4(國家)5
4(人們)7
2(打從心)2
2(心裡)2
2(相信)2
11(國王)8
2(國王是)2
2(是天神)2
4(天神)5
2(代理)2
2(也是)2
3(唯一)3
2(溝通管道)2
2(當然)2
2(個政)2
2(一個國家)2
3(個國家)4
2(所有)2
2(同一)2
5(一位)3
2(的天神)2
2(法拉)2
4(這個)3
2(這個國家)2
5(大家)7
2(我們)2
4(也都)4
3(使用)2
3(紙鈔)3
2(們每)2
6(每天)6
5(買東西)4
3(東西)6
4(都會)4
3(一些)3
2(些鈔票)2
5(需要)4
2(需要的)3
3(要的)3
4(的時候)4
3(出來)3
3(但是)5
9(沒有)9
2(沒有人)2
2(有人)3
4(知道)6
3(這些)3
4(從哪)2
3(從哪裡來)2
2(哪裡)2
2(很少人)2
2(很少人會)2
2(會去)2
8(這樣)5
3(這樣的)2
3(問題)4
2(小孩)2
2(是會)2
2(這個問題)2
3(許多)3
2(多人)3
2(心理)2
2(來自)2
3(們的)3
3(可以)2
2(可以用)3
2(想要)2
3(要的東西)3
2(雖然)2
4(不知道)3
2(並不)2
4(他們)5
2(使用鈔票)2
2(也不)2
4(的商)2
2(的商業)2
4(有一)3
2(有一個)2
2(個人)2
3(鈔票從)2
4(的人)3
2(早上)2
2(就會)2
2(今天)2
2(薪水)3
2(接著)2
2(密室)2
2(密室中)2
2(的一)2
2(一台)2
2(台機器)2
2(原本)2
2(喀拉)2
2(印出)2
3(了一)3
2(然後)2
2(將鈔票)2
2(總管)2
3(僕人)3
2(採購)2
4(所需)2
3(所需要的)2
5(大臣)4
4(大臣們)4
2(失業)2
2(的人們都)2
2(意的)2
2(些人)2
2(家的)2
2(國王都)2
2(而來)2
2(每位)2
2(位傳)2
2(台印鈔機)2
6(也就)5
2(一代)2
4(皇室)3
2(皇室每)2
2(到了)2
2(手上)2
3(任何)3
2(於是)6
2(於是皇后)2
2(是皇后)3
5(皇后)7
3(只好)3
2(國王的)2
2(這下)2
2(來了)2
2(室的)2
2(的物)2
3(一位大臣)3
2(已經)2
2(連繫)2
2(的開銷)2
2(開銷)3
2(還是)2
2(有著落)2
2(建議)2
2(抽稅)2
2(也就有)2
2(其他)2
3(實施)3
3(政策)3
4(開始)4
2(的心理都)2
2(不太)2
2(由於)2
2(所以)2
2(人想)2
2(買東西的)2
2(發現)2
4(越來越)4
2(留在)2
2(越多人)2
2(變得)2
2(生意)3
4(商家)5
3(降價)2
2(降價求售)2
2(的商家)2

程式:WordLearner.cs

using System;
using System.IO;
using System.Collections.Generic;
using System.Text;

class CountMap : Dictionary<String, int>
{
    public void add(String str)
    {
        if (ContainsKey(str))
            this[str]++;
        else
            this.Add(str, 1);
    }
}

class WordLearner
{
    public static String ChineseSymbols = "。,、;:?!「」『』──()﹝﹞……﹏﹏__‧·";

    public CountMap countMap = new CountMap();

    public static void Main(String[] args)
    {
        String corpus = fileToText(args[0]);
        WordLearner learner = new WordLearner();
        learner.run(corpus);
        List<String> words = learner.getWordList();
        print(words);
    }

    public static void print(List<String> words)
    {
        foreach (String word in words)
            Console.WriteLine(word);
    }    

    public static String fileToText(String filePath)
    {
        StreamReader file = new StreamReader(filePath);
        String text = file.ReadToEnd();
        file.Close();
        return text;
    }

    public WordLearner() {}

    public void run(String corpus)
    {
        count(corpus, countMap);
    }

    public void count(String text, CountMap countMap)
    {
        for (int i = 0; i < text.Length; i++)
        {
            String substr = text.Substring(i, Math.Min(text.Length - i, 6));
            for (int len = 2; len < substr.Length; len++)
            {
                char ch = substr[len-1];
                String head = substr.Substring(0, len);
                countMap.add(head);
                if (ch >= 0 && ch <= 127 || ChineseSymbols.IndexOf(ch) >= 0)
                    break;
            }
        }
    }

    public List<String> getWordList()
    {
        List<String> words = new List<String>();
        CountMap rfreeMap = new CountMap();
        CountMap lfreeMap = new CountMap();
        foreach (String str in countMap.Keys)
        {
            String head = str.Substring(0, str.Length-1);
            String tail = str.Substring(1, str.Length-1);
            rfreeMap.add(head);
            lfreeMap.add(tail);
        }
        foreach (String str in countMap.Keys)
        {
            if (rfreeMap.ContainsKey(str) && lfreeMap.ContainsKey(str))
                if (rfreeMap[str] >= 2 && lfreeMap[str] >= 2)
                    words.Add(lfreeMap[str] + "(" + str + ")" + rfreeMap[str]);
        }
        return words;
    }
}

輸入檔:Story.txt

天國來的鈔票 (1)

這是一個信仰虔誠的國家,人們打從心裡相信國王是天神的代理人,也是人類與天神之間唯一的溝通管道。

當然、這也是一個政教合一個國家,所有的國民都信仰同一種宗教,祭拜同一位神明,至高無上的天神「法拉」。

在這個國家裏,大家與我們一樣,也都使用紙鈔,人們每天買東西都會隨身帶一些鈔票出去,需要的時候就拿出來用。

但是,沒有人知道這些鈔票是從哪裡來的,也很少人會去思考這樣的問題。但是,好奇的小孩總是會問到這個問題。

沒有人刻意去回答這樣的問題,但是許多人打從心理相信,鈔票來自天國,是天神給予人們的禮物之一,讓大家都可以用來買到想要的東西。

雖然不知道鈔票是從哪裡來的,但這並不妨礙他們使用鈔票,也不妨礙他們的商業行為,人們依舊每天使用鈔票買東西。

只有一個人例外,那就是國王。

國王是整個國家當中唯一知到鈔票從哪裏來的人,他每天早上起床,就會想想今天需要用多少錢,買哪些東西,發給誰薪水等等。

接著國王會打開密室中的一台機器,按下幾個按鈕之後,原本空白的紙張上面就喀拉喀拉的印出了一些美麗的花紋,正確金額的鈔票就從這台機器的另一頭被送出來。

然後,國王就將鈔票交給他的總管與僕人,由僕人們去負責採購今天所需要的東西,總管去分發大臣們的薪水。

在這樣的一個國家當中,人們過得幸福且快樂。

很少人會失業,也很少人沒有飯吃,即便有人真的失業賺不到錢,信仰虔誠的人們都會很樂意的幫助這些人,讓他們也能吃得飽,穿得暖,睡得安穩。

這個國家的國王都是世襲而來的,而且根據傳統,每位國王都只能生一位小孩,然後將王位傳給那位小孩,就這樣,那台印鈔機也就一代接著一代,供應皇室每日所需要的鈔票。

當皇位傳到了第 72 代國王「耶啦」的手上時,發生了一件困擾人的事情。「耶啦」沒有生下任何子女就去世了,於是皇后「米拉」只好暫時代理國王的職務。

這下問題來了,皇后並不知道密室的存在,當然更不知道密室中有一台印鈔機,可以印出他所需要的鈔票。

但是皇后每天仍然需要僕人幫他去採購各項日常所需的物品,這下皇后可傷透腦筋了,錢該從哪裡來呢?

於是皇后招來所有大臣們來皇宮昭開「國是會議」,詢問:「國王在世的時候、鈔票從何而來」這個問題?

可惜的是,沒有任何一位大臣知道「國王的鈔票從何而來」!

後來,終於有一位大臣說了話:「鈔票應該是來自萬能的天神 — 法拉!」。

但可惜的是,國王「耶啦」已經死了,他們與「法拉」的唯一溝通管道已經喪失,而皇后也不知道如何才能連繫上「法拉」。

這下皇后可發慌了,皇室每天的開銷不少,一但無法聯繫上「法拉」,那這些開銷要從哪裡來呢?

….

「國是會議」從早上開到了晚上,還是沒有得到任何結果,大臣們吵成了一團,每個人都很著急,因為這樣下去,不只皇室的開銷沒有著落,大臣們的薪水也都會發不出來了。

最後,一位大臣「魯拉」建議說,不如這樣,我們向每位民眾抽稅,命令他們每人每年都要繳 100 元紙鈔給國家,這樣皇室也就有足夠的錢花用,而大臣們的薪水也就有著落了。

「魯拉」的提議一出,大臣們紛紛表示贊同,而皇后「米拉」在沒有其他辦法之下,也只好採用了「魯拉」的建議,下令實施抽稅政策!

這個政策一開始實施,許多老百姓的心理都不太高興,但是由於大家知道國王「耶啦」死了,所以皇后在連繫不上天神「法拉」的情況之下,不得已才實施此一政策,因此也就沒有太大的反彈,雖然心裡很不願意,但也都乖乖的繳了稅。

就這樣,日復一日,大家每天還是用「紙鈔」交易,買東西時也都帶著鈔票上街,國家又恢復了正常的運作。

….
….

一年後!

大家開始感覺到不太對勁,有些人想要去買東西的時候,發現沒有鈔票可以用,鈔票的數量好像越來越不夠了。

於是大家在用錢的時候都考慮再三,想說非必要的東西就盡量不要買,將鈔票留在家裡,真正需要時才有鈔票可以用。

但是越多人這樣想,就越多人想把錢留在手上,於是原本熱絡的商業活動,逐漸變得越來越冷清。

做生意的人們都發現,生意越來越難做了!

許多商家由於缺乏現金,於是只好降價求售。

買東西的人也開始越來越精打細算,希望用最少的鈔票換到最多的物資,於是都會去找價錢最低的商家購買!

所以當商家一降價,生意就會好一些,而其他賣的較貴的商家,也就變得乏人問津。

於是商家們開始競相降價求售,物價也就不斷的下跌。

大家的心理都有一個疑問,「錢」到底都去了哪裡呢?

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License