我正在详细阅读Training Data RASA Format。
{
"text": "show me chinese restaurants",
"intent": "restaurant_search",
"entities": [
{
"start": 8,
"end": 15,
"value": "chinese",
"entity": "cuisine"
}
]
}
子句Chinese
被标记为话语的第8到第15索引的实体。
我写了一个小的C#程序来验证话语中字符索引的正确性。
public class Program
{
public static void Main(string[] args)
{
string s = "show me chinese restaurants";
int i = 0;
foreach(var item in s.ToCharArray())
Console.WriteLine("{0} - {1}", item, i++);
}
}
但是当我运行程序时,我得到以下输出:
s - 0
h - 1
o - 2
w - 3
- 4
m - 5
e - 6
- 7
c - 8
h - 9
i - 10
n - 11
e - 12
s - 13
e - 14
- 15
r - 16
e - 17
s - 18
t - 19
a - 20
u - 21
r - 22
a - 23
n - 24
t - 25
s - 26
注意文本注释的奇怪行为,子串Chinese
从索引8开始,到15处用空格结束。
但是子串Chinese
应该从索引8开始,到第14位结束。
当我训练相同的文字Chinese
时,索引从第8位开始,到14结束。我按照详细here向RASA发出Misaligned Entity Annotation
警告。
有人可以解释这种奇怪的行为。
由于
答案 0 :(得分:4)
阅读链接provided我可能已经想出了一个可能的解释:
它们一起使python样式范围应用于字符串,例如在下面的示例中,使用text ="显示中国餐馆",然后发送文字[8:15] ==' chinese'
这引导我走上了我正在思考的道路
嗯,这很奇怪,我想知道python是否真的编入索引
我开了一个快速的应用来证明这一点:
text = "show me chinese restaurants"
print(text[8:15])
现在这可能没有意义,因为这里数组的空间15中的字符实际上是一个空格。这让我想到了这篇文章:
https://www.pythoncentral.io/how-to-slice-listsarrays-and-tuples-in-python/
他们在这里的示例text[8:15]
中使用的运算符似乎对数组进行切片,他们使用示例:
a = [1, 2, 3, 4, 5, 6, 7, 8]
a[1:4]
输出:[2, 3, 4]
并解释为
让我解释一下。 1表示从列表中的第二个元素开始(请注意,切片索引从0开始)。 4表示在列表中的第五个元素处结束,但不包括它。中间的冒号是Python的列表如何识别我们想要使用切片来获取列表中的对象。
所以切片的第二个参数似乎是独占的。
希望这有帮助
P.S。不得不学习和设置一些python的东西:D