如何找到句子的n-gram?

时间:2017-03-19 20:11:28

标签: c++

我得到helloworld的测试字符串,我必须找到n-gram,具体说明是3。因此,我的代码应该给我输出: hel, ell, llo, low, owo, wor, orl, rld,

我写的代码如下:

vector<string> generate_ngrams(string w, size_t n) {
vector<string> ngrams;

for (auto i = 0; i < n; i++) {
    ngrams.push_back(w.substr(i * n, n));

}

return ngrams; 

我的代码获得的输出: hel, low, orl,

我如何操作到目前为止的代码,以便for循环调用某种类型的推回到“e”,然后找到它后面的两个字母,并继续这样做,直到它可以不再这样做了吗?

以下是主要调用的内容,以查看被抛出的内容:

  case 2:{
    string s;
    int n;
    cin >> n;
    cin.ignore(100, '\n');    
    getline(cin, s);
    auto v = generate_ngrams(s, n);
    copy (v.begin(), v.end(), oss);
    cout << endl;
    break;
  }

1 个答案:

答案 0 :(得分:0)

n是子级的大小,而不是w的大小。

for (int i = 0; i <= w.length() - n; ++i)
{
    ngrams.push_back(w.substr(i, n));
}