首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ngrams (调整到现有bash脚本)

ngrams (调整到现有bash脚本)
EN

Stack Overflow用户
提问于 2013-07-24 13:48:33
回答 1查看 184关注 0票数 1

不久前,一个有思想和智慧的人帮我写了一个bash脚本,但最近我意识到我没有清楚地解释我想要的东西。我在一个纯文本文件中有一长串短语(Ngram)。如果一个短语是另一个短语的片段,那么只有较长的短语是有用的,所以需要删除较短的短语。下面的代码删除较长的代码。我希望这将是一个改变几个字符的问题。

代码语言:javascript
复制
#! /bin/bash
((n=${1:-0})) || exit 1

declare -A ngrams

while read -ra line; do
    for ((i = 0; i < ${#line[@]}; i++)); do
            ((ngrams[${line[@]:i:n}]++))
    done
done 

for i in "${!ngrams[@]}"; do
    printf '%d\t%s\n' "${ngrams[$i]}" "$i"
done
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-24 16:03:40

不是通过改变几个字符,而是新写的:

代码语言:javascript
复制
#! /bin/bash

declare -a ngrams
mapfile -t ngrams < $1
for ((i=0; i<${#ngrams[@]}; i++)); do
    for ((j=0; j<${#ngrams[@]}; j++)); do
        if  ((  i!=j )) && [[  "${ngrams[j]}" == *"${ngrams[i]}"* ]]; then
            continue 2
        fi
    done
    echo ${ngrams[i]} >> $2
done

你可以用ngram.sh <infile> <outfile>来称呼它。例如:

代码语言:javascript
复制
> cat txt.in
foo
me me me
kaaz
bar
foo bar
blub
me
> ./ngram.sh txt.in txt.out
> cat txt.out
me me me
kaaz
foo bar
blub
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17835939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档