0

単語とタグ (単語/タグのように見えます) を含むテキスト ファイルを解析しています。ファイル内の一意のタグの数を見つけようとしており、C++ で順序付けられていないセットを使用してタグを挿入しています。ただし、この例外がランダムに発生しているようです:「EXC_I386_GPFLT」を、順序付けされていないセットに (未決定の数の挿入の後) 挿入すると発生します。 400キロバイト。

これが私の主な機能です:

#include <iostream>
#include "ParseTrain.h"

int main(int argc, const char * argv[])
{
    ParseTrain p("~/Desktop/treebank.5290.train");
    std::cout<<"The Number of Tags is: "<<p.getSizeOfTag()<<std::endl;
    return 0;
}

ここに私の ParseTrain.cpp があります:

#include "ParseTrain.h"
#include <fstream>
#include <string>
#include <iostream>


ParseTrain::ParseTrain(std::string fName){
    std::ifstream file(fName);
    std::string word;

    if(!file)
        return;

    //read file by word
    while(file >> word ){
        char * cWord = new char (word.size()+1);
        std::strcpy(cWord,word.c_str());

        char *p = std::strtok(cWord, "/");
        std::string key = p;
        p = strtok(NULL, " ");
        std::string value = p;
        std::cout<<value<<std::endl;
        _tag.insert(value);//getting exception thrown after undeterminable number of inserts at this line
        delete [] cWord;
        cWord = NULL;
    }
}

ここに私の ParseTrain.h があります:

#include <iostream>
#include <map>
#include <string>
#include <vector>
#include <unordered_set>

class ParseTrain{
private:

    //map to relate the work and part of speech tag
    std::vector <std::map<std::string, std::string>> _sentence;
    std::unordered_set<std::string> _tag;
public:

    //constructor to parse file
    //takes in path to file to parse
    ParseTrain(std::string fName);

    inline size_t getSizeOfTag(){
        return _tag.size();
    }
};

最後に、タグを解析して取得しようとしているテキスト ファイルの一部を次に示します。

Pierre/NP Vinken/NP ,/, 61/CD years/NNS old/JJ ,/, will/MD join/VB the/DT board/NN as/IN a/DT nonexecutive/JJ director/NN Nov./NP 29/CD ./. 
Mr./NP Vinken/NP is/VBZ chairman/NN of/IN Elsevier/NP N.V./NP ,/, the/DT Dutch/NP publishing/VBG group/NN ./. 

挿入時に例外がスローされる理由が本当にわかりません。私が考えることができる唯一のことは、順序付けられていないセットのサイズに制限があるかもしれないということですが、私がそのような小さなメモリを使用していることを考えると、それは奇妙に思えます. どんな助けでも大歓迎です。

4

1 に答える 1