我想从文件中的句子中删除停用词?
停止词,我的意思是:
[I, a, an, as, at, the, by, in, for, of, on, that]
我在文件中有这些句子my_text.txt:
Unix 系统设计的主要目标之一是创建一个促进高效程序运行的环境。
然后我想从上面的句子中删除停用词
我使用了这个脚本:
array=( I a an as at the by in for of on that )
for i in "${array[@]}"
do
cat $p | sed -e 's/\<$i\>//g'
done < my_text.txt
Run Code Online (Sandbox Code Playgroud)
但输出是:
Unix 系统设计的主要目标之一是创建一个促进高效程序运行的环境。
预期的输出应该是:
设计 Unix 系统的一个主要目标是创建一个促进高效程序的环境
注意:我要删除 删除停用词 不是重复词?
像这样,假设$p是一个现有文件:
sed -i -e "s/\<$i\>//g" "$p"
Run Code Online (Sandbox Code Playgroud)
您必须使用双引号而不是单引号来扩展变量。
开关在线-i更换。
学习如何在shell中正确引用,这非常重要:
“双引号”包含空格/元字符的每个文字和每个扩展:
"$var","$(command "$var")","${array[@]}","a & b"。用于'single quotes'代码或文字$'s: 'Costs $5 US',ssh host 'echo "$HOSTNAME"'. 请参阅
http://mywiki.wooledge.org/Quotes
http://mywiki.wooledge.org/Arguments
http://wiki.bash-hackers.org/syntax/words
array=( I a an as at the by in for of on that )
for i in "${array[@]}"
do
sed -i -e "s/\<$i\>\s*//g" Input_File
done
Run Code Online (Sandbox Code Playgroud)
尝试不\s*理解为什么我添加这个正则表达式