Sha256: 2f5867276e82a82475365cfc462814bfad009cb550406f59ae376c53ad8ad91b

Contents?: true

Size: 1.94 KB

Versions: 10

Compression:

Stored size: 1.94 KB

Contents

#ifndef _RULES_H_
#define _RULES_H_

#include <vector>
#include <algorithm>

#include "chunk.h"

namespace rmmseg
{
    template <typename Cmp>
    void take_highest(std::vector<Chunk> &chunks, const Cmp &cmp)
    {
        unsigned int i = 1, j;

        for (j = 1; j < chunks.size(); ++j)
        {
            int rlt = cmp(chunks[j], chunks[0]);
            if (rlt > 0)
                i = 0;
            if (rlt >= 0)
                std::swap(chunks[i++], chunks[j]);
        }
        chunks.erase(chunks.begin()+i, chunks.end());
    }

    struct MMCmp_t
    {
        int operator()(const Chunk &a, const Chunk &b) const
        {
            return a.total_length() - b.total_length();
        }
    } MMCmp;
    void mm_filter(std::vector<Chunk> &chunks)
    {
        take_highest(chunks, MMCmp);
    }

    struct LAWLCmp_t
    {
        int operator()(const Chunk &a, const Chunk &b) const
        {
            double rlt = a.average_length() - b.average_length();
            if (rlt == 0)
                return 0;
            if (rlt > 0)
                return 1;
            return -1;
        }
    } LAWLCmp;
    void lawl_filter(std::vector<Chunk> &chunks)
    {
        take_highest(chunks, LAWLCmp);
    }

    struct SVWLCmp_t
    {
        int operator()(const Chunk &a, const Chunk& b) const
        {
            double rlt = a.variance() - b.variance();
            if (rlt == 0)
                return 0;
            if (rlt < 0)
                return 1;
            return -1;
        }
    } SVWLCmp;
    void svwl_filter(std::vector<Chunk> &chunks)
    {
        take_highest(chunks, SVWLCmp);
    }

    struct LSDMFOCWCmp_t
    {
        int operator()(const Chunk &a, const Chunk& b) const
        {
            return a.degree_of_morphemic_freedom() - b.degree_of_morphemic_freedom();
        }
    } LSDMFOCWCmp;
    void lsdmfocw_filter(std::vector<Chunk> &chunks)
    {
        take_highest(chunks, LSDMFOCWCmp);
    }
}

#endif /* _RULES_H_ */

Version data entries

10 entries across 10 versions & 4 rubygems

Version Path
rmmseg-cpp-new-0.3.1 ext/rmmseg/rules.h
rmmseg-cpp-new-0.3.0 ext/rmmseg/rules.h
lijia-rmmseg-cpp-10.2.9.2 ext/rmmseg/rules.h
rmmseg-cpp-traditional-2.0.4 ext/rmmseg/rules.h
rmmseg-cpp-traditional-2.0.2 ext/rmmseg/rules.h
rmmseg-cpp-traditional-2.0.0 ext/rmmseg/rules.h
rmmseg-cpp-traditional-1.0.1 ext/rmmseg/rules.h
rmmseg-cpp-traditional-1.0.0 ext/rmmseg/rules.h
rmmseg-cpp-traditional-0.0.2 ext/rmmseg/rules.h
rmmseg-cpp-0.2.9 ext/rmmseg/rules.h