Skip to content

Commit

Permalink
feat(util): add dpinyin
Browse files Browse the repository at this point in the history
Change-Id: I34e1a9584085ed738e7d208e59e6972bed25fb5f
  • Loading branch information
justforlxz committed Dec 5, 2017
1 parent b9f3735 commit 128d7d6
Show file tree
Hide file tree
Showing 6 changed files with 25,435 additions and 2 deletions.
1 change: 1 addition & 0 deletions src/util/DPinyin
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#include "dpinyin.h"
6 changes: 6 additions & 0 deletions src/util/README.dpinyin
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Name: chinese_pinyin
Version: 1.0.1
Author: flyerhzm
License: MIT License
Home: https://github.com/flyerhzm/chinese_pinyin
Description: translate chinese hanzi to pinyin
83 changes: 83 additions & 0 deletions src/util/dpinyin.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
/*
* Copyright (C) 2017 ~ 2017 Deepin Technology Co., Ltd.
*
* Author: kirigaya <kirigaya@mkacg.com>
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* pinyin.dict from https://github.com/flyerhzm/chinese_pinyin
*/

#ifndef DPINYIN_H
#define DPINYIN_H

#include "dtkcore_global.h"

#include <QHash>

DCORE_BEGIN_NAMESPACE

static QHash<uint, QString> dict = {};

const char kDictFile[] = ":/dpinyin/resources/dpinyin.dict";

void InitDict() {
if (!dict.isEmpty()) {
return;
}

dict.reserve(25333);

QFile file(kDictFile);

if (!file.open(QIODevice::ReadOnly))
return;

QByteArray content = file.readAll();

file.close();

QTextStream stream(&content, QIODevice::ReadOnly);

while (!stream.atEnd()) {
const QString line = stream.readLine();
const QStringList items = line.split(QChar(':'));

if (items.size() == 2) {
dict.insert(items[0].toInt(nullptr, 16), items[1]);
}
}
}

QString Chinese2Pinyin(const QString& words) {
InitDict();

QString result;

for (int i = 0; i < words.length(); ++i) {
const uint key = words.at(i).unicode();
auto find_result = dict.find(key);

if (find_result != dict.end()) {
result.append(find_result.value());
} else {
result.append(words.at(i));
}
}

return result;
}

DCORE_END_NAMESPACE

#endif // DPINYIN_H
Loading

0 comments on commit 128d7d6

Please sign in to comment.