2015-09-23 62 views
1

陷於似乎導致更廣泛問題的相當微不足道的任務。自然語言文本突變的模板語言

需要能夠生成相同短文本的光變化。有些詞的形式取決於說話者的性別,有些可以用同義詞替代。

僞代碼:

I {random:decided|made up my mind} to {random:try|test|give a try to} 
this {new|fresh} {cool|awesome} {service|web service|online tool}. 

我正在尋找一個「行業標準」模板語言來形容這樣的文本和可能的變化。進一步思考,我可能想要全局變量(如性別之一),交叉鏈接爲在句子前面選擇的依賴關係。

這看起來很接近正則表達式語法。理想情況下,非編程人員可讀/寫更多。

也許這個問題是衆所周知的,像一些專門用於該任務的編程語言的固態解決方案?

回答

2

我無法找到像這樣的東西,所以我着手創建它。結果被稱爲Nalgene - the natural language generation language。語法非常簡單,但也足以支持遞歸短語,同義詞,捕獲值和依賴關係。它輸出生成的句子和樹形表示(主要目的是爲ML系統生成訓練數據)。

> jill went to the store to return her toothbrush 

(% 
    ($person.name 
     jill) 
    ($place 
     store) 
    (%action 
     ($item 
      toothbrush))) 

如果您還在尋找一年之後,請停下來打開一個問題,讓我知道您在尋找NLG語言的夢想。

1

假設你將不允許在文本中使用的支架或分離器(或以某種方式逃避他們),你可以做到這一點沒有太多的頭痛,例如在JavaScript:

function randreplace (txt) { 
    var matches = txt.match(/\{([^}]+)\}/g); 
    for (var m in matches) { 
     m = matches[m]; 
     var opts = m.substring(1, m.length-1); // rm '{' and '}' 
     opts = opts.split('|'); 
     var rand = opts[Math.floor(Math.random() * opts.length)]; 
     txt = txt.replace(m, rand); 
    } 
    return txt; 
} 
var example = "I {decided|made up my mind} to {try|test|give a try to} this {new|fresh} {cool|awesome} {service|web service|online tool}."; 

console.log(randreplace(example));