Remove trailing space in attribute type of Arff

This commit is contained in:
2023-03-20 20:24:32 +01:00
parent cfade7a556
commit 12222f7903

View File

@@ -7,35 +7,43 @@ using namespace std;
ArffFiles::ArffFiles() = default; ArffFiles::ArffFiles() = default;
vector<string> ArffFiles::getLines() const { vector<string> ArffFiles::getLines() const
{
return lines; return lines;
} }
unsigned long int ArffFiles::getSize() const { unsigned long int ArffFiles::getSize() const
{
return lines.size(); return lines.size();
} }
vector<pair<string, string>> ArffFiles::getAttributes() const { vector<pair<string, string>> ArffFiles::getAttributes() const
{
return attributes; return attributes;
} }
string ArffFiles::getClassName() const { string ArffFiles::getClassName() const
{
return className; return className;
} }
string ArffFiles::getClassType() const { string ArffFiles::getClassType() const
{
return classType; return classType;
} }
vector<vector<float>> &ArffFiles::getX() { vector<vector<float>>& ArffFiles::getX()
{
return X; return X;
} }
vector<int> &ArffFiles::getY() { vector<int>& ArffFiles::getY()
{
return y; return y;
} }
void ArffFiles::load(const string &fileName, bool classLast) { void ArffFiles::load(const string& fileName, bool classLast)
{
ifstream file(fileName); ifstream file(fileName);
if (!file.is_open()) { if (!file.is_open()) {
throw invalid_argument("Unable to open file"); throw invalid_argument("Unable to open file");
@@ -55,7 +63,7 @@ void ArffFiles::load(const string &fileName, bool classLast) {
type = ""; type = "";
while (ss >> type_w) while (ss >> type_w)
type += type_w + " "; type += type_w + " ";
attributes.emplace_back(attribute, type); attributes.emplace_back(attribute, trim(type));
continue; continue;
} }
if (line[0] == '@') { if (line[0] == '@') {
@@ -79,7 +87,8 @@ void ArffFiles::load(const string &fileName, bool classLast) {
} }
void ArffFiles::generateDataset(bool classLast) { void ArffFiles::generateDataset(bool classLast)
{
X = vector<vector<float>>(attributes.size(), vector<float>(lines.size())); X = vector<vector<float>>(attributes.size(), vector<float>(lines.size()));
auto yy = vector<string>(lines.size(), ""); auto yy = vector<string>(lines.size(), "");
int labelIndex = classLast ? static_cast<int>(attributes.size()) : 0; int labelIndex = classLast ? static_cast<int>(attributes.size()) : 0;
@@ -99,19 +108,21 @@ void ArffFiles::generateDataset(bool classLast) {
y = factorize(yy); y = factorize(yy);
} }
string ArffFiles::trim(const string &source) { string ArffFiles::trim(const string& source)
{
string s(source); string s(source);
s.erase(0, s.find_first_not_of(" \n\r\t")); s.erase(0, s.find_first_not_of(" \n\r\t"));
s.erase(s.find_last_not_of(" \n\r\t") + 1); s.erase(s.find_last_not_of(" \n\r\t") + 1);
return s; return s;
} }
vector<int> ArffFiles::factorize(const vector<string> &labels_t) { vector<int> ArffFiles::factorize(const vector<string>& labels_t)
{
vector<int> yy; vector<int> yy;
yy.reserve(labels_t.size()); yy.reserve(labels_t.size());
map<string, int> labelMap; map<string, int> labelMap;
int i = 0; int i = 0;
for (const string &label: labels_t) { for (const string& label : labels_t) {
if (labelMap.find(label) == labelMap.end()) { if (labelMap.find(label) == labelMap.end()) {
labelMap[label] = i++; labelMap[label] = i++;
} }