2017年华东师范大学校赛 - EOJ - 3252 - 语言辨别

題目鏈接

題意簡述如下:

給定一篇字母形式的真實語料,判斷是英文,是中文還是日文。

在解題之前,我先大喊三聲計算語言學大法好,在別人的博客裏看到華師校賽有這樣的題目我就興奮地跑過來馬上A掉了。出題人腦洞很大啊。

數據給的是真實語料,所以語言特徵是很明顯的。因此,我們觀察一下文本規律即可。

英文的規律:

有如下不符合其他兩種語言拼寫方式的特徵詞,一旦出現即可判定:is, are, in, and。

中文(拼音)的規律:

聲母最多兩個字母,韻母最多三個字母。所以,單詞長度絕對是不會超過5的。爲了保險起見我們設定長度閾值爲6,即:若整篇文章所有的單詞的長度都不超過6,就判定爲中文。(這個長度閾值只能往大裏改,而不能往小裏改。)

日文(羅馬音)就不需要找規律了,剩下的就是日文。文本中的單詞可以以如下方式存在:

  1. 單獨元音。
  2. 連續的元音。
  3. 輔音+元音。
  4. (3)和其他形態的組合,其中可能含有連續的輔音(拗音及促音)。

這些都無所謂了(逃)。

代碼如下:

#include<bits/stdc++.h>
using namespace std;
main(){
    string s;
    int len_less_than_six = 1;
    while(cin >> s){
        for(int i = 0;i<s.size();i++){
            if(s[i] == '.'|| s[i] == '\'' || s[i] == '?' || s[i] == ','||(s[i]>='0' &&  s[i]<='9')) {
                s[i] = '\0';
                break;
            }
        }
        if(s == "is" || s == "are" || s == "in" || s == "and"){ cout << "English" << endl;return 0;}
        if(s.size()>6) len_less_than_six = 0;
    }
    if(len_less_than_six) cout << "Chinese" << endl;
    else cout << "Japanese" << endl;
}

評注:

真實的語言識別遠遠沒有這麼簡單。拉丁語系的語言,區分起來應該需要不小的語料。

還是要計算一下特徵向量……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值