0

リスト内の単語を交換する必要がある評価があります。「古い単語」である単語の列と「新しい単語」である単語の列を含むtxtファイルを指定しました。文字列をチェックして「古い単語」リスト/列の単語が文字列に含まれているかどうかを確認する関数を定義する必要があります。次に、その単語を「新しい単語」列の対応する単語と交換する必要があります。

例えば:

単語の2つの列の最初の行:['We、'You']。

文字列:「猫と結婚式に行った」 出力:「猫と結婚式に行った」

与えられたtxtファイルには2つの列が含まれていたので、少しコードを書いた後、単語を特定のリストに分割しました。「old_word_list」というリストがあります。このリストには、含まれる/含まれる可能性のあるすべての単語の個々の文字列が含まれています。文字列、および古い単語を置き換えるために使用される単語を含む「new_word_list」と呼ばれるリスト。

擬似コードの概念: 文字列にold_word_listの単語が含まれている場合は、同じ(対応する)インデックスのnew_word_listの単語に置き換えます。

これは、誰かが親切に私を助けてくれれば、私が立ち往生している評価の唯一の部分です。また、必要な情報を省略した場合はコメントしてください。ありがとうございました。

完全なコード:

# Declaring a global variables for the file, so it can be used in the code.
filename = "reflection.txt"
the_file = open(filename)

# Declaring any other reqiured variables.
word_list = []
old_word_list = []
new_word_list = []

# Creating loop to add all words to a list. 
for line in the_file:

    # Appends each line to the end of the list declared above. In appending
    # the lines, the code also removes the last character on each line (/n).
    word_list.append(line[:-1])

# Creating a loop to split each individual word, then appends the
# old/original words to a declared list, and appends the new words
# to a declared list.
for index in range(len(word_list)):
    temp_word = word_list[index]
    split_words = temp_word.split()
    old_word_list.append(split_words[0])
    new_word_list.append(split_words[1])

# Defining a function to produce altered statement.
def reflect_statement(statement):

    # Swaps the old word with the new word.
    for i in range(len(old_word_list)):
        if old_word_list[i] in statement:
             statement.replace(old_word_list[i], new_word_list[i])

    # Replaces '.' and '!' with '?'    
    for index in range(list_length):
        if old_word_list[index] in statement:
            statment = statement.replace(old_word_list[index], \
                                         new_word_list[index])

    statement = statement.replace(".", "?")
    statement = statement.replace("!", "?")

    # Returns result statement.
    return statement.
4

5 に答える 5

3

次のコードを使用できます。

# the words to be replaced
old_word_list=['We','cat']

# the new words
new_word_list=['You','dog']

my_string="We went to a wedding with our cat"

# it prints "We went to a wedding with our cat"
print my_string

# iterate over the list of old words
for word in old_word_list:
  # get the index of the current word
  index = old_word_list.index(word)

  # use this index to do the replacement with the words of the two lists
  my_string = my_string.replace(old_word_list[index], new_word_list[index])

# it prints "You went to a wedding with our dog"
print my_string

著者のコメントに従って更新された回答:

# the words to be replaced
old_word_list=['We','cat']

# the new words
new_word_list=['You','dog']

def reflect_statement(statement):
  # iterate over the list of old words
  for word in old_word_list:
    # get the index of the current word
    index = old_word_list.index(word)

    # use this index to do the replacement with the words of the two lists
    statement = statement.replace(old_word_list[index], new_word_list[index])

  return statement

mystring="We went to a wedding with our cat"
mystring = reflect_statement(mystring)
print mystring

著者が最後に追加したソースコードの後に​​回答を更新しました:

関数を次のように変更します。

def reflect_statement(statement, old_word_list, new_word_list):
  mystr=statement
  # iterate over the list of old words
  for word in old_word_list:
    # get the index of the current word
    index = old_word_list.index(word)

    # use this index to do the replacement with the words of the two lists
    mystr = mystr.replace(old_word_list[index], new_word_list[index])

  return mystr
于 2012-04-11T11:33:38.253 に答える
1

ヒント:

  1. "string string".split()#空白の文字列をリストに分割する
  2. forループを使用してリストをループできます
  3. リストにはmyList.index(element)、要素がリストにあるかどうかを通知し、そのインデックスを返すためのがあります。
  4. インデックスは2つのリスト間で一致します(説明によると)
  5. そのルートに行きたい場合に備えて、文字列には「myString.replace(old、new)」メソッドもあります。
于 2012-04-11T11:12:39.213 に答える
0

私があなたを正しく理解しているなら、これはそれかもしれませんが、それはきれいではありません:

for i in range( len(old_word_list) )
    if old_word_list[i] in "some string":
         "some string".replace(old_word_list[i], new_word_list[i])
于 2012-04-11T11:09:29.697 に答える
0
# map old to new words (assuming there are no duplicates)
replacement_mapping = dict(zip(old_word_list, new_word_list))

# go through each word of the string, if it's in the mapping, use replacement, otherwise the word from the string
new_string = ' '.join([replacement_mapping.get(word, word) for word in given_string.split(' ')])
于 2012-04-11T11:17:52.610 に答える
0

回答を投稿する前に行ったいくつかの仮定を述べますので、これらのいずれかが間違っている場合は修正してください。

仮定 1: 各列に同じ数の単語がある 仮定 2: 各単語には 1 つの「パートナー」しかなく、1 つの単語ペアを作る

その場合、各単語のペアをそれ自体でリストにします。次に、疑似コードを続けるために、テキストの各行について、各単語のペアをチェックし、word[0] を word[1] に置き換えます。

編集申し訳ありませんが、私はこれをあいまいに言いました。単語ペアリストを作成するとき、これらもリストに保存します。たとえば[["old1", "new1"], ["old2", "new2"]]、ループを実行してそれらを置き換えます(割り当てを行っていることを認識しているため、今はサンプルコードを示していません。問題を解決しますが、苦労している場合はお知らせください)。

于 2012-04-11T11:06:31.620 に答える