0

“test_tweet1.txt”中有两句话

@francesco_con40 2nd worst QB. DEFINITELY Tony Romo. The man who likes to share the ball with everyone. Including the other team.
@mariakaykay aga tayo tomorrow ah. :) Good night, Ces. Love you! >:D<

在“个人.txt”中

The Game (rapper)
The Notorious B.I.G.
The Undertaker
Thor
Tiësto
Timbaland
T.I.
Tom Cruise
Tony Romo
Trajan
Triple H

我的代码:

import re
popular_person = open('C:/Users/Personal.txt')
rpopular_person = popular_person.read()
file1 = open("C:/Users/test_tweet1.txt").readlines()
array = []
count1 = 0
for line in file1:
    array.append(line)
    count1 = count1 + 1
    print "\n",count1, line
    ltext1 = line.split(" ")
    for i,text in enumerate(ltext1):
        if text in rpopular_person:
            print text
    text2 = ' '.join(ltext1)

代码结果显示:

1 @francesco_con40 2nd worst QB. DEFINITELY Tony Romo. The man who likes to share the ball with everyone. Including the other team.
Tony
The
man
to
the
the

2 @mariakaykay aga tayo tomorrow ah. :) Good night, Ces. Love you! >:D<
aga

我试图将“test_tweet1.txt”中的单词与“Personal.txt”匹配。

预期结果:

Tony
Romo

有什么建议吗?

4

2 回答 2

0

您需要拆分rpopular_person以匹配单词而不是子字符串

rpopular_person = open('C:/Users/Personal.txt').read().split()

这给出了:

Tony
The

Romo 没有出现的原因是在您的线路拆分中您有“Romo”。也许您应该在行中寻找 rpopular_person,而不是相反。也许是这样的

popular_person = open('C:/Users/Personal.txt').read().split("\n")
file1 = open("C:/Users/test_tweet1.txt")
array = []
for count1, line in enumerate(file1):
    print "\n", count1, line
    for person in popular_person:
        if person in line:
            print person
于 2013-06-04T15:17:16.350 回答
0

您的问题似乎rpopular_person只是一个字符串。因此,当您询问类似 的内容时'to' in rpopular_person,您会得到 的值True,因为字符't', 'o'是按顺序出现的。我假设'the'Personal.txt 中的其他地方也是如此。

您要做的是将 Personal.txt 拆分为单个单词,就像您拆分推文的方式一样。您还可以将生成的单词列表放入 aset中,因为这将使您的查找速度更快。像这样的东西:

people = set(popular_person.read().split())

还值得注意的是,我正在调用split(),没有任何参数。这会拆分所有空格——换行符、制表符等。这样,您就可以按照自己的意愿单独获得所有内容。或者,如果您实际上并不想要这个(因为这将根据您编辑的 Personal.txt 内容始终为您提供“The”的结果),请使其:

people = set(popular_person.read().split('\n'))

这样你就可以换行了,所以你只寻找全名匹配。


你没有得到“Romo”,因为这不是你的推文中的一个词。你推文中的词是“Romo”。有句号。这很可能对您来说仍然是一个问题,所以我要做的是重新安排您的逻辑(假设速度不是问题)。与其查看推文中的每个单词,不如查看 Personal.txt 文件中的每个名称,看看它是否是in完整的推文。这样您就不必处理标点符号等。以下是我将如何重写您的功能:

rpopular_person = set(personal.split())
with open("Personal.txt") as p:
    people = p.read().split('\n') # Get full names rather than partial names
with open("test_tweet1.txt") as tweets:
    for tweet in tweets:
        for person in people:
            if person in tweet:
                print person
于 2013-06-04T15:17:35.897 回答