1

いくつかのドキュメントを読んでいて、読んだ単語のインデックスを作成しています。ただし、一般的な大文字と小文字の単語(a、an、the、and、is、or、areなど)は無視したいと思います。

これを行うためのショートカットはありますか?ただやるよりも...

if(word == "and" || word == "is" || etc ....)単語を無視します。

たとえば、どういうわけかそれらをconst文字列に入れて、文字列に対してチェックさせることはできますか?わからない...ありがとう!

4

3 に答える 3

5

set<string>除外する単語を使用してを作成し、その単語mySet.count(word)がセットに含まれているかどうかを判断するために使用します。そうである場合、カウントは1;になります。それ以外の場合になり0ます。

#include <iostream>
#include <set>
#include <string>
using namespace std;

int main() {
    const char *words[] = {"a", "an", "the"};
    set<string> wordSet(words, words+3);
    cerr << wordSet.count("the") << endl;
    cerr << wordSet.count("quick") << endl;
    return 0;
}
于 2012-04-15T00:47:24.903 に答える
1

文字列の配列を使用して、それぞれをループして照合するsetか、、、またはtrieなどのより最適なデータ構造を使用できます。

通常の配列でそれを行う方法の例を次に示します。

const char *commonWords[] = {"and", "is" ...};
int commonWordsLength = 2; // number of words in the array

for (int i = 0; i < commonWordsLength; ++i)
{
    if (!strcmp(word, commonWords[i]))
    {
        //ignore word;
        break;
    }
}

この例ではC++STLを使用していませんが、使用する必要があることに注意してください。

于 2012-04-15T00:47:05.633 に答える
0

パフォーマンスを最大化したい場合は、トライを作成する必要があります。

http://en.wikipedia.org/wiki/Trie

...ストップワードの...

http://en.wikipedia.org/wiki/Stop_words

標準のC++トライデータ構造はありませんが、サードパーティの実装についてはこの質問を参照してください...

実装を試す

それを気にすることができず、標準のコンテナを使用したい場合はunordered_set<string>、ストップワードをハッシュテーブルに配置するのが最適です。

bool filter(const string& word)
{
    static unordered_set<string> stopwords({"a", "an", "the"});
    return !stopwords.count(word);
}
于 2012-04-15T00:52:11.333 に答える