Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
DeepSpeech
提交
f8caaf46
D
DeepSpeech
项目概览
PaddlePaddle
/
DeepSpeech
大约 2 年 前同步成功
通知
210
Star
8425
Fork
1598
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
245
列表
看板
标记
里程碑
合并请求
3
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
DeepSpeech
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
245
Issue
245
列表
看板
标记
里程碑
合并请求
3
合并请求
3
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
“59bcd1f70ecf9bab527b6c2b7bedf82fe4714cfb”上不存在“tools/git@gitcode.net:xiaomi/mace.git”
未验证
提交
f8caaf46
编写于
12月 27, 2022
作者:
H
Hui Zhang
提交者:
GitHub
12月 27, 2022
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor cmake, rm absl/linsndfile, add strings unittest (#2765)
上级
869f4267
变更
16
隐藏空白更改
内联
并排
Showing
16 changed file
with
283 addition
and
47 deletion
+283
-47
speechx/CMakeLists.txt
speechx/CMakeLists.txt
+22
-32
speechx/README.md
speechx/README.md
+8
-0
speechx/cmake/gtest.cmake
speechx/cmake/gtest.cmake
+7
-1
speechx/cmake/openfst.cmake
speechx/cmake/openfst.cmake
+2
-0
speechx/cmake/system.cmake
speechx/cmake/system.cmake
+106
-0
speechx/speechx/asr/decoder/CMakeLists.txt
speechx/speechx/asr/decoder/CMakeLists.txt
+1
-1
speechx/speechx/asr/decoder/ctc_prefix_beam_search_decoder.cc
...chx/speechx/asr/decoder/ctc_prefix_beam_search_decoder.cc
+0
-1
speechx/speechx/asr/decoder/ctc_prefix_beam_search_decoder_main.cc
...peechx/asr/decoder/ctc_prefix_beam_search_decoder_main.cc
+0
-1
speechx/speechx/asr/nnet/CMakeLists.txt
speechx/speechx/asr/nnet/CMakeLists.txt
+1
-1
speechx/speechx/asr/nnet/ds2_nnet.cc
speechx/speechx/asr/nnet/ds2_nnet.cc
+6
-6
speechx/speechx/asr/server/websocket/CMakeLists.txt
speechx/speechx/asr/server/websocket/CMakeLists.txt
+1
-1
speechx/speechx/common/utils/CMakeLists.txt
speechx/speechx/common/utils/CMakeLists.txt
+15
-1
speechx/speechx/common/utils/math.cc
speechx/speechx/common/utils/math.cc
+3
-2
speechx/speechx/common/utils/strings.cc
speechx/speechx/common/utils/strings.cc
+50
-0
speechx/speechx/common/utils/strings.h
speechx/speechx/common/utils/strings.h
+26
-0
speechx/speechx/common/utils/strings_test.cc
speechx/speechx/common/utils/strings_test.cc
+35
-0
未找到文件。
speechx/CMakeLists.txt
浏览文件 @
f8caaf46
cmake_minimum_required
(
VERSION 3.14 FATAL_ERROR
)
cmake_minimum_required
(
VERSION 3.14 FATAL_ERROR
)
project
(
paddlespeech VERSION 0.1
)
set
(
CMAKE_PROJECT_INCLUDE_BEFORE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/cmake/EnableCMP0048.cmake"
)
set
(
CMAKE_PROJECT_INCLUDE_BEFORE
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/cmake/EnableCMP0048.cmake"
)
set
(
CMAKE_MODULE_PATH
${
CMAKE_MODULE_PATH
}
"
${
CMAKE_CURRENT_SOURCE_DIR
}
/cmake"
)
include
(
system
)
# Ninja Generator will set CMAKE_BUILD_TYPE to Debug
if
(
NOT CMAKE_BUILD_TYPE
)
set
(
CMAKE_BUILD_TYPE
"Release"
CACHE
STRING
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel"
FORCE
)
endif
()
project
(
paddlespeech VERSION 0.1
)
set
(
CMAKE_VERBOSE_MAKEFILE on
)
set
(
CMAKE_VERBOSE_MAKEFILE on
)
# set std-14
# set std-14
set
(
CMAKE_CXX_STANDARD 14
)
set
(
CMAKE_CXX_STANDARD 14
)
# cmake dir
set
(
speechx_cmake_dir
${
PROJECT_SOURCE_DIR
}
/cmake
)
# Modules
list
(
APPEND CMAKE_MODULE_PATH
${
speechx_cmake_dir
}
)
include
(
FetchContent
)
include
(
FetchContent
)
include
(
ExternalProject
)
include
(
ExternalProject
)
...
@@ -33,6 +42,7 @@ SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} --std=c++14 -pthread -fPIC -O3 -Wall
...
@@ -33,6 +42,7 @@ SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} --std=c++14 -pthread -fPIC -O3 -Wall
###############################################################################
###############################################################################
option
(
TEST_DEBUG
"option for debug"
OFF
)
option
(
TEST_DEBUG
"option for debug"
OFF
)
option
(
USE_PROFILING
"enable c++ profling"
OFF
)
option
(
USE_PROFILING
"enable c++ profling"
OFF
)
option
(
WITH_TESTING
"unit test"
ON
)
option
(
USING_U2
"compile u2 model."
ON
)
option
(
USING_U2
"compile u2 model."
ON
)
option
(
USING_DS2
"compile with ds2 model."
ON
)
option
(
USING_DS2
"compile with ds2 model."
ON
)
...
@@ -42,26 +52,10 @@ option(USING_GPU "u2 compute on GPU." OFF)
...
@@ -42,26 +52,10 @@ option(USING_GPU "u2 compute on GPU." OFF)
###############################################################################
###############################################################################
# Include third party
# Include third party
###############################################################################
###############################################################################
# example for include third party
# FetchContent_MakeAvailable was not added until CMake 3.14
# FetchContent_MakeAvailable()
# include_directories()
# gflags
include
(
gflags
)
include
(
gflags
)
# glog
include
(
glog
)
include
(
glog
)
# gtest
include
(
gtest
)
# ABSEIL-CPP
include
(
absl
)
# libsndfile
include
(
libsndfile
)
# boost
# boost
# include(boost) # not work
# include(boost) # not work
set
(
boost_SOURCE_DIR
${
fc_patch
}
/boost-src
)
set
(
boost_SOURCE_DIR
${
fc_patch
}
/boost-src
)
...
@@ -87,6 +81,11 @@ add_dependencies(openfst gflags glog)
...
@@ -87,6 +81,11 @@ add_dependencies(openfst gflags glog)
# paddle lib
# paddle lib
include
(
paddleinference
)
include
(
paddleinference
)
# gtest
if
(
WITH_TESTING
)
include
(
gtest
)
# download, build, install gtest
endif
()
# python/pybind11/threads
# python/pybind11/threads
find_package
(
Threads REQUIRED
)
find_package
(
Threads REQUIRED
)
# https://cmake.org/cmake/help/latest/module/FindPython3.html#module:FindPython3
# https://cmake.org/cmake/help/latest/module/FindPython3.html#module:FindPython3
...
@@ -165,15 +164,6 @@ message(STATUS PADDLE_LIB_DIRS= ${PADDLE_LIB_DIRS})
...
@@ -165,15 +164,6 @@ message(STATUS PADDLE_LIB_DIRS= ${PADDLE_LIB_DIRS})
###############################################################################
###############################################################################
# Add local library
# Add local library
###############################################################################
###############################################################################
# system lib
#find_package()
# if dir have CmakeLists.txt
#add_subdirectory(speechx)
# if dir do not have CmakeLists.txt
#add_library(lib_name STATIC file.cc)
#target_link_libraries(lib_name item0 item1)
#add_dependencies(lib_name depend-target)
set
(
SPEECHX_ROOT
${
CMAKE_CURRENT_SOURCE_DIR
}
/speechx
)
set
(
SPEECHX_ROOT
${
CMAKE_CURRENT_SOURCE_DIR
}
/speechx
)
add_subdirectory
(
speechx
)
add_subdirectory
(
speechx
)
speechx/README.md
浏览文件 @
f8caaf46
...
@@ -113,3 +113,11 @@ apt-get install gfortran-8
...
@@ -113,3 +113,11 @@ apt-get install gfortran-8
4.
`Undefined reference to '_gfortran_concat_string'`
4.
`Undefined reference to '_gfortran_concat_string'`
using gcc 8.2, gfortran 8.2.
using gcc 8.2, gfortran 8.2.
5.
`./boost/python/detail/wrap_python.hpp:57:11: fatal error: pyconfig.h: No such file or directory`
```
apt-get install python3-dev
```
for more info please see
[
here
](
https://github.com/okfn/piati/issues/65
)
.
speechx/cmake/gtest.cmake
浏览文件 @
f8caaf46
include
(
FetchContent
)
include
(
FetchContent
)
FetchContent_Declare
(
FetchContent_Declare
(
gtest
gtest
...
@@ -6,4 +7,9 @@ FetchContent_Declare(
...
@@ -6,4 +7,9 @@ FetchContent_Declare(
)
)
FetchContent_MakeAvailable
(
gtest
)
FetchContent_MakeAvailable
(
gtest
)
include_directories
(
${
gtest_BINARY_DIR
}
${
gtest_SOURCE_DIR
}
/src
)
include_directories
(
${
gtest_BINARY_DIR
}
${
gtest_SOURCE_DIR
}
/src
)
\ No newline at end of file
if
(
WITH_TESTING
)
enable_testing
()
endif
()
\ No newline at end of file
speechx/cmake/openfst.cmake
浏览文件 @
f8caaf46
...
@@ -25,3 +25,5 @@ ExternalProject_Add(openfst
...
@@ -25,3 +25,5 @@ ExternalProject_Add(openfst
)
)
link_directories
(
${
openfst_PREFIX_DIR
}
/lib
)
link_directories
(
${
openfst_PREFIX_DIR
}
/lib
)
include_directories
(
${
openfst_PREFIX_DIR
}
/include
)
include_directories
(
${
openfst_PREFIX_DIR
}
/include
)
message
(
STATUS
"OpenFST inc dir:
${
openfst_PREFIX_DIR
}
/include"
)
message
(
STATUS
"OpenFST lib dir:
${
openfst_PREFIX_DIR
}
/lib"
)
\ No newline at end of file
speechx/cmake/system.cmake
0 → 100644
浏览文件 @
f8caaf46
# Copyright (c) 2016 PaddlePaddle Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Detects the OS and sets appropriate variables.
# CMAKE_SYSTEM_NAME only give us a coarse-grained name of the OS CMake is
# building for, but the host processor name like centos is necessary
# in some scenes to distinguish system for customization.
#
# for instance, protobuf libs path is <install_dir>/lib64
# on CentOS, but <install_dir>/lib on other systems.
if
(
UNIX AND NOT APPLE
)
# except apple from nix*Os family
set
(
LINUX TRUE
)
endif
()
if
(
WIN32
)
set
(
HOST_SYSTEM
"win32"
)
else
()
if
(
APPLE
)
set
(
HOST_SYSTEM
"macosx"
)
exec_program
(
sw_vers ARGS
-productVersion
OUTPUT_VARIABLE HOST_SYSTEM_VERSION
)
string
(
REGEX MATCH
"[0-9]+.[0-9]+"
MACOS_VERSION
"
${
HOST_SYSTEM_VERSION
}
"
)
if
(
NOT DEFINED $ENV{MACOSX_DEPLOYMENT_TARGET}
)
# Set cache variable - end user may change this during ccmake or cmake-gui configure.
set
(
CMAKE_OSX_DEPLOYMENT_TARGET
${
MACOS_VERSION
}
CACHE
STRING
"Minimum OS X version to target for deployment (at runtime); newer APIs weak linked. Set to empty string for default value."
)
endif
()
set
(
CMAKE_EXE_LINKER_FLAGS
"-framework CoreFoundation -framework Security"
)
else
()
if
(
EXISTS
"/etc/issue"
)
file
(
READ
"/etc/issue"
LINUX_ISSUE
)
if
(
LINUX_ISSUE MATCHES
"CentOS"
)
set
(
HOST_SYSTEM
"centos"
)
elseif
(
LINUX_ISSUE MATCHES
"Debian"
)
set
(
HOST_SYSTEM
"debian"
)
elseif
(
LINUX_ISSUE MATCHES
"Ubuntu"
)
set
(
HOST_SYSTEM
"ubuntu"
)
elseif
(
LINUX_ISSUE MATCHES
"Red Hat"
)
set
(
HOST_SYSTEM
"redhat"
)
elseif
(
LINUX_ISSUE MATCHES
"Fedora"
)
set
(
HOST_SYSTEM
"fedora"
)
endif
()
string
(
REGEX MATCH
"(([0-9]+)
\\
.)+([0-9]+)"
HOST_SYSTEM_VERSION
"
${
LINUX_ISSUE
}
"
)
endif
()
if
(
EXISTS
"/etc/redhat-release"
)
file
(
READ
"/etc/redhat-release"
LINUX_ISSUE
)
if
(
LINUX_ISSUE MATCHES
"CentOS"
)
set
(
HOST_SYSTEM
"centos"
)
endif
()
endif
()
if
(
NOT HOST_SYSTEM
)
set
(
HOST_SYSTEM
${
CMAKE_SYSTEM_NAME
}
)
endif
()
endif
()
endif
()
# query number of logical cores
cmake_host_system_information
(
RESULT CPU_CORES QUERY NUMBER_OF_LOGICAL_CORES
)
mark_as_advanced
(
HOST_SYSTEM CPU_CORES
)
message
(
STATUS
"Found Paddle host system:
${
HOST_SYSTEM
}
, version:
${
HOST_SYSTEM_VERSION
}
"
)
message
(
STATUS
"Found Paddle host system's CPU:
${
CPU_CORES
}
cores"
)
# external dependencies log output
set
(
EXTERNAL_PROJECT_LOG_ARGS
LOG_DOWNLOAD
0
# Wrap download in script to log output
LOG_UPDATE
1
# Wrap update in script to log output
LOG_CONFIGURE
1
# Wrap configure in script to log output
LOG_BUILD
0
# Wrap build in script to log output
LOG_TEST
1
# Wrap test in script to log output
LOG_INSTALL
0
# Wrap install in script to log output
)
\ No newline at end of file
speechx/speechx/asr/decoder/CMakeLists.txt
浏览文件 @
f8caaf46
...
@@ -19,7 +19,7 @@ if (USING_U2)
...
@@ -19,7 +19,7 @@ if (USING_U2)
endif
()
endif
()
add_library
(
decoder STATIC
${
srcs
}
)
add_library
(
decoder STATIC
${
srcs
}
)
target_link_libraries
(
decoder PUBLIC kenlm utils fst frontend nnet kaldi-decoder
absl::strings
)
target_link_libraries
(
decoder PUBLIC kenlm utils fst frontend nnet kaldi-decoder
)
# test
# test
if
(
USING_DS2
)
if
(
USING_DS2
)
...
...
speechx/speechx/asr/decoder/ctc_prefix_beam_search_decoder.cc
浏览文件 @
f8caaf46
...
@@ -17,7 +17,6 @@
...
@@ -17,7 +17,6 @@
#include "decoder/ctc_prefix_beam_search_decoder.h"
#include "decoder/ctc_prefix_beam_search_decoder.h"
#include "absl/strings/str_join.h"
#include "base/common.h"
#include "base/common.h"
#include "decoder/ctc_beam_search_opt.h"
#include "decoder/ctc_beam_search_opt.h"
#include "decoder/ctc_prefix_beam_search_score.h"
#include "decoder/ctc_prefix_beam_search_score.h"
...
...
speechx/speechx/asr/decoder/ctc_prefix_beam_search_decoder_main.cc
浏览文件 @
f8caaf46
...
@@ -12,7 +12,6 @@
...
@@ -12,7 +12,6 @@
// See the License for the specific language governing permissions and
// See the License for the specific language governing permissions and
// limitations under the License.
// limitations under the License.
#include "absl/strings/str_split.h"
#include "base/common.h"
#include "base/common.h"
#include "decoder/ctc_prefix_beam_search_decoder.h"
#include "decoder/ctc_prefix_beam_search_decoder.h"
#include "frontend/audio/data_cache.h"
#include "frontend/audio/data_cache.h"
...
...
speechx/speechx/asr/nnet/CMakeLists.txt
浏览文件 @
f8caaf46
...
@@ -9,7 +9,7 @@ if(USING_U2)
...
@@ -9,7 +9,7 @@ if(USING_U2)
endif
()
endif
()
add_library
(
nnet STATIC
${
srcs
}
)
add_library
(
nnet STATIC
${
srcs
}
)
target_link_libraries
(
nnet
absl::string
s
)
target_link_libraries
(
nnet
util
s
)
if
(
USING_U2
)
if
(
USING_U2
)
target_compile_options
(
nnet PUBLIC
${
PADDLE_COMPILE_FLAGS
}
)
target_compile_options
(
nnet PUBLIC
${
PADDLE_COMPILE_FLAGS
}
)
...
...
speechx/speechx/asr/nnet/ds2_nnet.cc
浏览文件 @
f8caaf46
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
#include "nnet/ds2_nnet.h"
#include "nnet/ds2_nnet.h"
#include "
absl/strings/str_split
.h"
#include "
utils/strings
.h"
namespace
ppspeech
{
namespace
ppspeech
{
...
@@ -26,16 +26,16 @@ using std::vector;
...
@@ -26,16 +26,16 @@ using std::vector;
void
PaddleNnet
::
InitCacheEncouts
(
const
ModelOptions
&
opts
)
{
void
PaddleNnet
::
InitCacheEncouts
(
const
ModelOptions
&
opts
)
{
std
::
vector
<
std
::
string
>
cache_names
;
std
::
vector
<
std
::
string
>
cache_names
;
cache_names
=
absl
::
StrSplit
(
opts
.
cache_names
,
","
);
cache_names
=
StrSplit
(
opts
.
cache_names
,
","
);
std
::
vector
<
std
::
string
>
cache_shapes
;
std
::
vector
<
std
::
string
>
cache_shapes
;
cache_shapes
=
absl
::
StrSplit
(
opts
.
cache_shape
,
","
);
cache_shapes
=
StrSplit
(
opts
.
cache_shape
,
","
);
assert
(
cache_shapes
.
size
()
==
cache_names
.
size
());
assert
(
cache_shapes
.
size
()
==
cache_names
.
size
());
cache_encouts_
.
clear
();
cache_encouts_
.
clear
();
cache_names_idx_
.
clear
();
cache_names_idx_
.
clear
();
for
(
size_t
i
=
0
;
i
<
cache_shapes
.
size
();
i
++
)
{
for
(
size_t
i
=
0
;
i
<
cache_shapes
.
size
();
i
++
)
{
std
::
vector
<
std
::
string
>
tmp_shape
;
std
::
vector
<
std
::
string
>
tmp_shape
;
tmp_shape
=
absl
::
StrSplit
(
cache_shapes
[
i
],
"-"
);
tmp_shape
=
StrSplit
(
cache_shapes
[
i
],
"-"
);
std
::
vector
<
int
>
cur_shape
;
std
::
vector
<
int
>
cur_shape
;
std
::
transform
(
tmp_shape
.
begin
(),
std
::
transform
(
tmp_shape
.
begin
(),
tmp_shape
.
end
(),
tmp_shape
.
end
(),
...
@@ -74,8 +74,8 @@ PaddleNnet::PaddleNnet(const ModelOptions& opts) : opts_(opts) {
...
@@ -74,8 +74,8 @@ PaddleNnet::PaddleNnet(const ModelOptions& opts) : opts_(opts) {
LOG
(
INFO
)
<<
"start to check the predictor input and output names"
;
LOG
(
INFO
)
<<
"start to check the predictor input and output names"
;
LOG
(
INFO
)
<<
"input names: "
<<
opts
.
input_names
;
LOG
(
INFO
)
<<
"input names: "
<<
opts
.
input_names
;
LOG
(
INFO
)
<<
"output names: "
<<
opts
.
output_names
;
LOG
(
INFO
)
<<
"output names: "
<<
opts
.
output_names
;
vector
<
string
>
input_names_vec
=
absl
::
StrSplit
(
opts
.
input_names
,
","
);
std
::
vector
<
std
::
string
>
input_names_vec
=
StrSplit
(
opts
.
input_names
,
","
);
vector
<
string
>
output_names_vec
=
absl
::
StrSplit
(
opts
.
output_names
,
","
);
std
::
vector
<
std
::
string
>
output_names_vec
=
StrSplit
(
opts
.
output_names
,
","
);
paddle_infer
::
Predictor
*
predictor
=
GetPredictor
();
paddle_infer
::
Predictor
*
predictor
=
GetPredictor
();
...
...
speechx/speechx/asr/server/websocket/CMakeLists.txt
浏览文件 @
f8caaf46
...
@@ -10,4 +10,4 @@ target_link_libraries(websocket_server_main PUBLIC fst websocket ${DEPS})
...
@@ -10,4 +10,4 @@ target_link_libraries(websocket_server_main PUBLIC fst websocket ${DEPS})
add_executable
(
websocket_client_main
${
CMAKE_CURRENT_SOURCE_DIR
}
/websocket_client_main.cc
)
add_executable
(
websocket_client_main
${
CMAKE_CURRENT_SOURCE_DIR
}
/websocket_client_main.cc
)
target_include_directories
(
websocket_client_main PRIVATE
${
SPEECHX_ROOT
}
${
SPEECHX_ROOT
}
/kaldi
)
target_include_directories
(
websocket_client_main PRIVATE
${
SPEECHX_ROOT
}
${
SPEECHX_ROOT
}
/kaldi
)
target_link_libraries
(
websocket_client_main PUBLIC fst websocket
${
DEPS
}
)
target_link_libraries
(
websocket_client_main PUBLIC fst websocket
${
DEPS
}
)
\ No newline at end of file
speechx/speechx/common/utils/CMakeLists.txt
浏览文件 @
f8caaf46
...
@@ -2,4 +2,18 @@
...
@@ -2,4 +2,18 @@
add_library
(
utils
add_library
(
utils
file_utils.cc
file_utils.cc
math.cc
math.cc
)
strings.cc
\ No newline at end of file
)
if
(
WITH_TESTING
)
enable_testing
()
link_libraries
(
gtest_main gmock
)
add_executable
(
strings_test strings_test.cc
)
target_link_libraries
(
strings_test PUBLIC utils
)
add_test
(
NAME strings_test
COMMAND strings_test
)
endif
()
\ No newline at end of file
speechx/speechx/common/utils/math.cc
浏览文件 @
f8caaf46
...
@@ -15,13 +15,14 @@
...
@@ -15,13 +15,14 @@
// limitations under the License.
// limitations under the License.
#include "utils/math.h"
#include "utils/math.h"
#include "base/basic_types.h"
#include <algorithm>
#include <algorithm>
#include <cmath>
#include <cmath>
#include <queue>
#include <queue>
#include <utility>
#include <utility>
#include <string>
#include
"base/common.h"
#include
<vector>
namespace
ppspeech
{
namespace
ppspeech
{
...
...
speechx/speechx/common/utils/strings.cc
0 → 100644
浏览文件 @
f8caaf46
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include <sstream>
#include "utils/strings.h"
namespace
ppspeech
{
std
::
vector
<
std
::
string
>
StrSplit
(
const
std
::
string
&
str
,
const
char
*
delim
,
bool
omit_empty_string
){
std
::
vector
<
std
::
string
>
outs
;
int
start
=
0
;
int
end
=
str
.
size
();
int
found
=
0
;
while
(
found
!=
std
::
string
::
npos
){
found
=
str
.
find_first_of
(
delim
,
start
);
// start != end condition is for when the delimiter is at the end
if
(
!
omit_empty_string
||
(
found
!=
start
&&
start
!=
end
)){
outs
.
push_back
(
str
.
substr
(
start
,
found
-
start
));
}
start
=
found
+
1
;
}
return
outs
;
}
std
::
string
StrJoin
(
const
std
::
vector
<
std
::
string
>&
strs
,
const
char
*
delim
)
{
std
::
stringstream
ss
;
for
(
ssize_t
i
=
0
;
i
<
strs
.
size
();
++
i
){
ss
<<
strs
[
i
];
if
(
i
<
strs
.
size
()
-
1
){
ss
<<
std
::
string
(
delim
);
}
}
return
ss
.
str
();
}
}
// namespace ppspeech
\ No newline at end of file
speechx/speechx/common/utils/strings.h
0 → 100644
浏览文件 @
f8caaf46
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include <vector>
#include <string>
namespace
ppspeech
{
std
::
vector
<
std
::
string
>
StrSplit
(
const
std
::
string
&
str
,
const
char
*
delim
,
bool
omit_empty_string
=
true
);
std
::
string
StrJoin
(
const
std
::
vector
<
std
::
string
>&
strs
,
const
char
*
delim
);
}
// namespace ppspeech
\ No newline at end of file
speechx/speechx/common/utils/strings_test.cc
0 → 100644
浏览文件 @
f8caaf46
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "utils/strings.h"
#include <gtest/gtest.h>
#include <gmock/gmock.h>
TEST
(
StringTest
,
StrSplitTest
)
{
using
::
testing
::
ElementsAre
;
std
::
string
test_str
=
"hello world"
;
std
::
vector
<
std
::
string
>
outs
=
ppspeech
::
StrSplit
(
test_str
,
"
\t
"
);
EXPECT_THAT
(
outs
,
ElementsAre
(
"hello"
,
"world"
));
}
TEST
(
StringTest
,
StrJoinTest
)
{
std
::
vector
<
std
::
string
>
ins
{
"hello"
,
"world"
};
std
::
string
out
=
ppspeech
::
StrJoin
(
ins
,
" "
);
EXPECT_THAT
(
out
,
"hello world"
);
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录