1

我想随机化给定文本中的所有单词,这样我就可以输入一个像英文这样的文件

"The quick brown fox jumped over the lazy dogs." 

并让它输出:

"fox jumped lazy brown The over the dogs. quick"    

我能想到的最简单的方法是将文本导入python,将其放入以数字序列为键的字典中,然后将这些数字随机化并获取输出。有没有更简单的方法可以做到这一点,也许是从命令行,这样我就不必做太多的编程了?

4

4 回答 4

11

又快又脏:

echo ".."|xargs -n1 |shuf|paste -d' ' -s

你的例子:

kent$  echo "The quick brown fox jumped over the lazy dogs."|xargs -n1 |shuf|paste -d' ' -s
the jumped quick dogs. brown over lazy fox The

如果你没有shufsort -R也可以。同样的想法。

于 2013-05-22T16:18:16.380 回答
4

快速解决方案:

您可以在 bash 中使用sort -R随机化行。tr将进行字符串替换。

例子:

echo ".." | tr -s " " "\n" | sort -R | tr "\n" " "; echo

将随机化一个由空格分隔的字符串。

另一种变化是将所有非字母数字字符转换为换行符

| tr -cs 'a-zA-Z0-9' '\n'

解释:

# tr -c       all NOT matching 
# tr -s       remove all dublicates )

-> 随机化线条

| sort -R  

-> 用空格替换所有换行符

| tr "\n" " "

-> 用 sed 删除最后一个空格

| sed "s/ *$//"

最后添加一个点(和一个换行符)

; echo "." 

最后:从另一个句子中生成一个真正的新句子的函数

忽略重复空格并删除所有非字母数字的功能

阅读输出会让你听起来像尤达大师......

sentence="This sentence shall be randomized...really!"

echo $sentence | tr -cs 'a-zA-Z0-9' '\n' | sort -R | tr "\n" " " | sed "s/ *$//"; echo "."

输出示例:

randomized This shall be sentence really.
really be shall randomized This sentence.

...

补充:sed 解释 (我知道你想要它......)

sed "s/bla/blub/"           # replace bla with blub
sed "s/bla*$/blub/"         # replace the last occurence of bla with blub
sed "s/ *$//"               # -> delete last space aka replace with nothing

只会洗牌。

于 2013-05-22T16:17:51.233 回答
4

在 Python 中:

>>> import random
>>> s = "I want to randomize all the words in a given text, so that I can input a file with English like "
>>> words = s.split()
>>> random.shuffle(words)
>>> ' '.join(words) 
'words I so like a can the text, I want a randomize input given with to in all that English file'
于 2013-05-22T16:22:08.127 回答
1

使用 Python,从 bash 提示符:

echo "The quick brown fox jumped over the lazy dogs." | \
python -c "import random, sys; x = sys.stdin.read().strip().split(' '); \
random.shuffle(x); sys.stdout.write('\"{}\"\n'.format(' '.join(x)))"
于 2013-05-22T16:25:45.603 回答