animatediff-cli-prompt-travel の create-config で動画の各フレームに対してプロンプトを自動生成したら余計な単語がたくさん入ってきたので Perl で一括削除しました

animatediff-cli-prompt-travel の create-config を行うと以下のように各フレームに対してプロンプトを返してくれます。

"0": "(blonde_hair:0.83),(long_hair:0.83),(looking_at_viewer:0.61),(blue_shirt:0.50),(denim:0.35),(pants:0.68),(teeth:0.41),(solo:0.92),(1girl:0.99),(print_shirt:0.43),(railing:0.55),(smile:0.86),(grin:0.41)",
"1": "(blonde_hair:0.86),(long_hair:0.84),(looking_at_viewer:0.72),(outdoors:0.37),(blue_shirt:0.38),(clothes_writing:0.39),(pants:0.65),(teeth:0.41),(solo:0.91),(1girl:0.98),(shirt:0.86),(print_shirt:0.41),(t-shirt:0.57),(smile:0.88),(grin:0.50)",
"2": "(blonde_hair:0.83),(long_hair:0.85),(looking_at_viewer:0.70),(outdoors:0.46),(blurry_background:0.37),(short_sleeves:0.50),(clothes_writing:0.37),(pants:0.70),(teeth:0.41),(solo:0.92),(1girl:0.98),(shirt:0.86),(print_shirt:0.42),(t-shirt:0.58),(smile:0.84),(grin:0.39)",
"3": "(blonde_hair:0.85),(long_hair:0.84),(looking_at_viewer:0.69),(outdoors:0.50),(blurry_background:0.36),(short_sleeves:0.49),(pants:0.64),(teeth:0.44),(solo:0.93),(1girl:0.98),(shirt:0.85),(brown_eyes:0.39),(print_shirt:0.35),(t-shirt:0.62),(smile:0.91),(grin:0.55)",
"4": "(blonde_hair:0.86),(long_hair:0.84),(looking_at_viewer:0.71),(outdoors:0.54),(blurry_background:0.40),(short_sleeves:0.45),(pants:0.63),(teeth:0.43),(solo:0.92),(1girl:0.98),(shirt:0.86),(brown_eyes:0.36),(print_shirt:0.36),(shorts:0.39),(t-shirt:0.63),(smile:0.93),(grin:0.53)",
"5": "(blonde_hair:0.87),(long_hair:0.84),(looking_at_viewer:0.74),(outdoors:0.45),(blurry_background:0.48),(short_sleeves:0.44),(pants:0.57),(teeth:0.40),(solo:0.92),(1girl:0.99),(shirt:0.86),(print_shirt:0.39),(shorts:0.45),(t-shirt:0.62),(smile:0.91),(grin:0.48)",
"6": "(blonde_hair:0.87),(long_hair:0.82),(looking_at_viewer:0.73),(outdoors:0.42),(blurry_background:0.48),(short_sleeves:0.47),(pants:0.65),(teeth:0.44),(solo:0.90),(1girl:0.98),(shirt:0.85),(brown_eyes:0.38),(t-shirt:0.58),(smile:0.89),(grin:0.48)",
"7": "(blonde_hair:0.83),(long_hair:0.81),(looking_at_viewer:0.72),(outdoors:0.46),(denim:0.45),(blurry_background:0.41),(short_sleeves:0.47),(pants:0.63),(teeth:0.40),(solo:0.91),(1girl:0.98),(shirt:0.83),(brown_eyes:0.39),(t-shirt:0.58),(smile:0.92),(grin:0.52)",
"8": "(blonde_hair:0.84),(long_hair:0.84),(looking_at_viewer:0.73),(outdoors:0.55),(denim:0.43),(blurry_background:0.51),(short_sleeves:0.52),(pants:0.61),(teeth:0.39),(solo:0.91),(1girl:0.98),(shirt:0.83),(brown_eyes:0.40),(print_shirt:0.35),(t-shirt:0.55),(smile:0.88),(grin:0.41)",



不必要と思われる単語も入っています。

消そうにも単語のうしろに数字がくっついているので一筋縄ではいきません。

一括で消すには正規表現を使うのがよいと思います。自分の中ではこういった用途にはPerlが最も適していると考えています。

my @lines = (
    "black_shirt",
    "blonde_hair",
    "blue_eyes",
    "blue_shirt",
    "blurry_background",
    "brown_eyes",
    "brown_hair",
    "building",
    "cellphone",
    "clothes_writing",
    "day",
    "denim",
    "english_text",
    "jeans",
    "long_hair",
    "meme",
    "mustache",
    "outdoors",
    "pants",
    "parody",
    "phone",
    "print_shirt",
    "railing",
    "red_pants",
    "red_skirt",
    "shirt",
    "shorts",
    "short_sleeves",
    "skirt",
    "smartphone",
    "soccer",
    "soccer_uniform",
    "solo",
    "sportswear",
    "t-shirt",
    "1girl"
    );

while(<>){

    foreach my $var(@lines){
        s/"\(${var}:[\d|\.]+\),/"/ig;
        s/,\(${var}:[\d|\.]+\),/,/ig;
        s/,\(${var}:[\d|\.]+\)"/"/ig;
    }

    print;
}

実行

perl remove.pl prompt.json > new_prompt.json

結果

"0": "(denim:0.35),(pants:0.68),(teeth:0.41),(print_shirt:0.43),(railing:0.55),(smile:0.86),(grin:0.41)",
"1": "(outdoors:0.37),(clothes_writing:0.39),(pants:0.65),(teeth:0.41),(shirt:0.86),(print_shirt:0.41),(smile:0.88),(grin:0.50)",
"2": "(outdoors:0.46),(short_sleeves:0.50),(clothes_writing:0.37),(pants:0.70),(teeth:0.41),(shirt:0.86),(print_shirt:0.42),(smile:0.84),(grin:0.39)",
"3": "(outdoors:0.50),(short_sleeves:0.49),(pants:0.64),(teeth:0.44),(shirt:0.85),(print_shirt:0.35),(smile:0.91),(grin:0.55)",
"4": "(outdoors:0.54),(short_sleeves:0.45),(pants:0.63),(teeth:0.43),(shirt:0.86),(print_shirt:0.36),(shorts:0.39),(smile:0.93),(grin:0.53)",
"5": "(outdoors:0.45),(short_sleeves:0.44),(pants:0.57),(teeth:0.40),(shirt:0.86),(print_shirt:0.39),(shorts:0.45),(smile:0.91),(grin:0.48)",
"6": "(outdoors:0.42),(short_sleeves:0.47),(pants:0.65),(teeth:0.44),(shirt:0.85),(smile:0.89),(grin:0.48)",
"7": "(outdoors:0.46),(denim:0.45),(short_sleeves:0.47),(pants:0.63),(teeth:0.40),(shirt:0.83),(smile:0.92),(grin:0.52)",
"8": "(outdoors:0.55),(denim:0.43),(short_sleeves:0.52),(pants:0.61),(teeth:0.39),(shirt:0.83),(print_shirt:0.35),(smile:0.88),(grin:0.41)",

補足(ワードを抽出する)

my @words = ();

while (my $line = <>) {
    
    my @match_array = $line =~ /\(([^:]+):[\d|\.]+\)/ig;
    push @words, @match_array;
}

my %seen;
my @unique = grep { !$seen{$_}++ } @words;
my @sorted = sort @unique;

foreach my $element (@sorted) {
    print "$element\n";
}
perl extract_words.pl prompt.json