从其位置重新创建句子

时间:2016-04-12 14:32:08

标签: python

sentence= raw_input("Enter a sentence: ")
sentence = sentence.lower()
sentence = sentence.split()
uniquewords = []
for word in sentence:
    if word not in uniquewords:
        uniquewords.append(word)
position = [word for word in range(len(uniquewords))]

我有独特的词,独特的词和句子的位置。我现在需要用每个单词的位置重新创建原始句子,例如:I LIKE PYTHON PYTHON PYTHON LIKE HI

这将重新创建为1 2 3 3 3 2 4。唯一字代表单词" PYTHON"可以重复多次,而不影响" HI"并且使它在位置7可以有人请帮助我用每个单词的位置重新创建原始句子。

5 个答案:

答案 0 :(得分:1)

首先你需要一个好的字符串标记器,以正确的方式将标记拆分为标记。 nltk附带了一个好的字符串标记。

macbookproloreto:~ admin$ python
Python 2.7.10 (default, Jul 14 2015, 19:46:27) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import nltk
>>> sentence="I LIKE PYTHON PYTHON PYTHON LIKE HI" 
>>> tokens = nltk.word_tokenize(sentence)
>>> tokens
['I', 'LIKE', 'PYTHON', 'PYTHON', 'PYTHON', 'LIKE', 'HI']
>>>

只要你有tokens,你就有了数组索引的位置,所以你可以进行迭代。

此时我们创建了set个唯一字词:

>>> unique=set(tokens)
>>> unique
set(['I', 'PYTHON', 'HI', 'LIKE'])

然后我们把它变成一个列表

>>> list(unique)
['I', 'PYTHON', 'HI', 'LIKE']

我们知道原始标记数组中的匹配位置,即原始句子,所以:

>>> indices = [tokens.index(t) for t in tokens]
>>> indices
[0, 1, 2, 2, 2, 1, 6]

这是你原来的句子:

>>> original = " ".join([tokens[t] for t in indices])
>>> original
'I LIKE PYTHON PYTHON PYTHON LIKE HI'

答案 1 :(得分:1)

首先我不知道是不是因为你的程序未完成或错误但是位置结果是[0, 1, 2, 3]而不是[0, 1, 2, 2, 2, 1, 3]

这是您的程序的完整版本,可以从位置开始工作和构造句子。 我在digitSentence中重命名了位置:

sentence= raw_input("Enter a sentence: ")
sentence = sentence.lower()
sentence = sentence.split()
uniquewords = []
for word in sentence:
    if word not in uniquewords:
        uniquewords.append(word)
wordToNum = {uniquewords[word]: word for word in range(len(uniquewords))}

digitSentence = map(wordToNum.get, sentence)

print digitSentence

print ' '.join(map(uniquewords.__getitem__, digitSentence))

答案 2 :(得分:0)

您只需遍历位置数组并使用唯一字的索引。类似的东西:

reconstructed = []

for i in position:
  reconstructed.append(uniquewords[i])

print " ".join(reconstructed)

应该做的伎俩...

答案 3 :(得分:0)

位置输出?

if (LOCATIONOne_Sel_Val=='')
    {
        if($('#errorLocOne').length) 
        {
            return false; //If the error Message is displayed already
        }
        else //Display the error message
        {
            $(errorMsgLocOne).insertAfter('#Loc_Id1');
            return false;
        }
    }
else if(LOCATIONTwo_Sel_Val=='')
    {
    if($('#errorLocTwo').length) 
        {
            return false; //If the error Message is displayed already
        }
        else //Display the error message
        {
            $(errorMsgLocTwo).insertAfter('#Loc_Id2');
            return false;
        }
    }

答案 4 :(得分:0)

这是一个简单的解决方案:

sentence = raw_input("Enter a sentence: ")
sentence = sentence.lower().split()
uniquewords = []
for word in sentence:
    if word not in uniquewords:
        uniquewords.append(word)

positions = [uniquewords.index(word) for word in sentence]
recreated = " ".join([uniquewords[i] for i in positions])

print positions
print recreated

请注意,在此实施中,排名从0开始,而不是1