我正在使用Facebook 的 Duckling來決議文本。當我傳遞文本時:13h 47m它正確地將整個文本分類為DURATION(= 13 小時 47 分鐘)。
但是,當我傳遞文本時:13h 47m 13s它無法13s將 String 的一部分識別為DURATION. 我原以為它會將其決議為,13 hours, 47 minutes and 13 seconds但它本質上忽略了該13s部分,因為它不是DURATION.
Command: curl -XPOST http://127.0.0.1:0000/parse --data locale=en_US&text="13h 47m 13s"
JSON Array:
[
{
"latent": false,
"start": 0,
"dim": "duration",
"end": 7,
"body": "13h 47m",
"value": {
"unit": "minute",
"normalized": {
"unit": "second",
"value": 49620
},
"type": "value",
"value": 827,
"minute": 827
}
},
{
"latent": false,
"start": 8,
"dim": "number",
"end": 10,
"body": "13",
"value": {
"type": "value",
"value": 13
}
}
]
這是一個錯誤嗎?如何更新 Duckling 以便它決議上述文本?
uj5u.com熱心網友回復:
檔案似乎很清楚這一點:
要擴展 Duckling 對給定語言中維度的支持,通常需要更新 4 個檔案:
Duckling/<Dimension>/<Lang>/Rules.hsDuckling/<Dimension>/<Lang>/Corpus.hsDuckling/Dimensions/<Lang>.hs(如果尚未出現在 中Duckling/Dimensions/Common.hs)Duckling/Rules/<Lang>.hs
看一看Duckling/Duration/Rules.hs,我看到:
ruleIntegerUnitofduration = Rule
{ name = "<integer> <unit-of-duration>"
, pattern =
[ Predicate isNatural
, dimension TimeGrain
]
-- ...
所以接下來我偷看了Duckling/TimeGrain/EN/Rules.hs(因為Duckling/TimeGrain/Rules.hs不存在),看到:
grains :: [(Text, String, TG.Grain)]
grains = [ ("second (grain) ", "sec(ond)?s?", TG.Second)
-- ...
大概這意味著13h 47m 13sec會決議你想要的方式。為了以13h 47m 13s同樣的方式進行決議,我想我會嘗試的第一件事是讓上面的正則運算式更寬松一點,可能類似于s(ec(ond)?s?)?,看看這是否能在不破壞你關心的其他任何東西的情況下解決問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/448836.html
