1 /**************************************************************************** 2 ** 3 ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). 4 ** Contact: http://www.qt-project.org/legal 5 ** 6 ** This file is part of the tools applications of the Qt Toolkit. 7 ** 8 ** $QT_BEGIN_LICENSE:LGPL$ 9 ** Commercial License Usage 10 ** Licensees holding valid commercial Qt licenses may use this file in 11 ** accordance with the commercial license agreement provided with the 12 ** Software or, alternatively, in accordance with the terms contained in 13 ** a written agreement between you and Digia. For licensing terms and 14 ** conditions see http://qt.digia.com/licensing. For further information 15 ** use the contact form at http://qt.digia.com/contact-us. 16 ** 17 ** GNU Lesser General Public License Usage 18 ** Alternatively, this file may be used under the terms of the GNU Lesser 19 ** General Public License version 2.1 as published by the Free Software 20 ** Foundation and appearing in the file LICENSE.LGPL included in the 21 ** packaging of this file. Please review the following information to 22 ** ensure the GNU Lesser General Public License version 2.1 requirements 23 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. 24 ** 25 ** In addition, as a special exception, Digia gives you certain additional 26 ** rights. These rights are described in the Digia Qt LGPL Exception 27 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. 28 ** 29 ** GNU General Public License Usage 30 ** Alternatively, this file may be used under the terms of the GNU 31 ** General Public License version 3.0 as published by the Free Software 32 ** Foundation and appearing in the file LICENSE.GPL included in the 33 ** packaging of this file. Please review the following information to 34 ** ensure the GNU General Public License version 3.0 requirements will be 35 ** met: http://www.gnu.org/copyleft/gpl.html. 36 ** 37 ** 38 ** $QT_END_LICENSE$ 39 ** 40 ****************************************************************************/ 41 42 #ifndef SIMTEXTH_H 43 #define SIMTEXTH_H 44 45 const int textSimilarityThreshold = 190; 46 47 #include <QString> 48 #include <QList> 49 50 class MetaTranslator; 51 52 struct Candidate { 53 QString source; 54 QString target; 55 CandidateCandidate56 Candidate() { } CandidateCandidate57 Candidate( const QString& source0, const QString& target0 ) 58 : source( source0 ), target( target0 ) { } 59 }; 60 61 inline bool operator==( const Candidate& c, const Candidate& d ) { 62 return c.target == d.target && c.source == d.source; 63 } 64 inline bool operator!=( const Candidate& c, const Candidate& d ) { 65 return !operator==( c, d ); 66 } 67 68 typedef QList<Candidate> CandidateList; 69 70 struct CoMatrix; 71 /** 72 * This class is more efficient for searching through a large array of candidate strings, since we only 73 * have to construct the CoMatrix for the \a stringToMatch once, 74 * after that we just call getSimilarityScore(strCandidate). 75 * \sa getSimilarityScore 76 */ 77 class StringSimilarityMatcher { 78 public: 79 StringSimilarityMatcher(const QString &stringToMatch); 80 ~StringSimilarityMatcher(); 81 int getSimilarityScore(const QString &strCandidate); 82 83 private: 84 CoMatrix *m_cm; 85 int m_length; 86 }; 87 88 int getSimilarityScore(const QString &str1, const char* str2); 89 90 CandidateList similarTextHeuristicCandidates( const MetaTranslator *tor, 91 const char *text, 92 int maxCandidates ); 93 94 #endif 95