string - 有效去除字符串标点符号

标签 string julia

我读了一段文字,想删除它的所有标点符号。我的第一个想法是:

data = readlines("text.txt")
data = lowercase.(data)
data = replace.(data, [','], [""])
data = replace.(data, ['.'], [""])
data = replace.(data, ['?'], [""])
data = replace.(data, [';'], [""])
data = replace.(data, ['!'], [""])
data = replace.(data, [':'], [""])
data = replace.(data, ['('], [""])
data = replace.(data, [')'], [""])

这变得非常烦人。我没有找到一种方法将它们全部组合在一个语句中。使用 replace.(data, [".", ";"], ["", ""]) 我得到一个 DimensionMismatch。

有任何想法吗?

最佳答案

广播时,如果您不想迭代集合(如数组或元组),则应将其包装在数组中(在示例中,我仅使用两个字符 ,; 作为替代,但这可以更多):

julia> data = ["a,b;c","x,y;z"]
2-element Array{String,1}:
 "a,b;c"
 "x,y;z"

julia> replace.(data, [[',',';']], "")
2-element Array{String,1}:
 "abc"
 "xyz"

关键部分是 [[',',';']] ,它将替换替代数组包装到一个元素数组中。

另一种方法是使用正则表达式:
julia> replace.(data, r"[,;]", "")
2-element Array{String,1}:
 "abc"
 "xyz"

现在替换模式 r"[,;]" 不需要被包装。

如果您关心性能,使用 [[',',';']] 的第一个模式会快一点,但使用正则表达式更灵活,因为它允许您捕获更复杂的模式。

编辑

现在它将是:
julia> replace.(data, [',',';'] => "")
2-element Array{String,1}:
 "abc"
 "xyz"

或者
julia> replace.(data, r"[,;]" => "")
2-element Array{String,1}:
 "abc"
 "xyz"

关于string - 有效去除字符串标点符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49092853/

相关文章:

c++ - 没有匹配的函数 - ifstream open()

c++ - 我如何能够遍历 C++ 中的字符串 vector ?

Python,从字符串中删除所有html标签

polymorphism - 从抽象类型访问字段时,julia 类型不稳定

julia - 循环排列

java - 创建字符串数组的链表

C# 删除分隔符之前/之后的字符串

julia - 如何在 Atom 中运行 Julia 脚本

arrays - 在 Julia 中将数组转换为 DataFrame 或保存为 CSV

algorithm - 定点算法中的内存分配