Python 2中的字符串替换和匹配

Python 2中的字符串替换和匹配,python,Python,我有一些用户帖子,我希望与预先确定的模式列表相匹配(参见示例)。如果帖子与模式匹配,我想将帖子和模式写入一个文件。最好的方法是什么?到目前为止,我只想过用4个for循环强制执行它,然后进行一些比较。我已经有了我需要的所有数据的列表,下面只是一些非常简单的例子,让你知道我在寻找什么 示例 帖子: posts =['When I ate at McDonald\'s, I felt sick.', 'I like eating at Burger King.', 'Wendy\'s made me

我有一些用户帖子,我希望与预先确定的模式列表相匹配(参见示例)。如果帖子与模式匹配,我想将帖子和模式写入一个文件。最好的方法是什么?到目前为止,我只想过用4个for循环强制执行它,然后进行一些比较。我已经有了我需要的所有数据的列表,下面只是一些非常简单的例子,让你知道我在寻找什么


示例

帖子:

posts =['When I ate at McDonald\'s, I felt sick.',
'I like eating at Burger King.',
'Wendy\'s made me feel happy.']
patterns = ['When I ate at [RESTAURANT]',
'I like eating at [RESTAURANT]',
'[RESTAURANT] made me feel [FEELING]',
'I felt [FEELING]']
restaurant_names = ['McDonald\'s', 'Burger King', 'Wendy\'s']

feelings = ['happy', 'sick', 'tired']
模式:

posts =['When I ate at McDonald\'s, I felt sick.',
'I like eating at Burger King.',
'Wendy\'s made me feel happy.']
patterns = ['When I ate at [RESTAURANT]',
'I like eating at [RESTAURANT]',
'[RESTAURANT] made me feel [FEELING]',
'I felt [FEELING]']
restaurant_names = ['McDonald\'s', 'Burger King', 'Wendy\'s']

feelings = ['happy', 'sick', 'tired']
列表:

posts =['When I ate at McDonald\'s, I felt sick.',
'I like eating at Burger King.',
'Wendy\'s made me feel happy.']
patterns = ['When I ate at [RESTAURANT]',
'I like eating at [RESTAURANT]',
'[RESTAURANT] made me feel [FEELING]',
'I felt [FEELING]']
restaurant_names = ['McDonald\'s', 'Burger King', 'Wendy\'s']

feelings = ['happy', 'sick', 'tired']
输出文件:

posts =['When I ate at McDonald\'s, I felt sick.',
'I like eating at Burger King.',
'Wendy\'s made me feel happy.']
patterns = ['When I ate at [RESTAURANT]',
'I like eating at [RESTAURANT]',
'[RESTAURANT] made me feel [FEELING]',
'I felt [FEELING]']
restaurant_names = ['McDonald\'s', 'Burger King', 'Wendy\'s']

feelings = ['happy', 'sick', 'tired']
当我在
[餐厅]
吃饭时,当我在麦当劳吃饭时,我感到恶心

当我在麦当劳吃饭时,我感到恶心

[餐厅]
让我感觉
[感觉]
,温迪让我感觉很快乐

我喜欢在
[餐厅]
吃饭,我喜欢在汉堡王餐厅吃饭



-很抱歉设置了格式,但这是我在stackoverflow上潜伏了一段时间后的第一篇文章。提前感谢您的帮助

像这样的东西怎么样:

>>> sentences = ["When I ate at McDonald's, I felt sick.", 'I like eating at Burger King.', 
    "Wendy's made me feel happy."]
>>> patterns = {"McDonald's": "[RESTAURANT]", "Burger King": "[RESTAURANT]", 
    "Wendy's": "[RESTAURANT]", "happy": "[FEELING]", "sick": "[FEELING]", 
    "tired": "[FEELING]"}
那你就可以了

>>> for sentence in sentences:
...     replaced = sentence
...     for pattern in patterns:
...         if pattern in sentence:
...             replaced = replaced.replace(pattern, patterns[pattern])
...     print sentence
...     print replaced
...
When I ate at McDonald's, I felt sick.
When I ate at [RESTAURANT], I felt [FEELING].
I like eating at Burger King.
I like eating at [RESTAURANT].
Wendy's made me feel happy.
[RESTAURANT] made me feel [FEELING].

这仍然需要一些工作(例如,现在,
carsick
一词将变成
car[FEELING]
),您可能希望通过创建另一个替换文本列表来避免
模式
值中的所有重复,但也许这就足够让你开始了?

我不确定我是否理解。你能把你到目前为止掌握的确切密码公布出来吗?你打算做什么?为什么?谢谢

一般来说,有4种备选方案:

1) 使用单一但复杂的正则表达式模式和严格的列表

r"(When I ate at (?P<rest1>McDonald's|Burger King|Wendy's), I felt (?P<feel1>happy|sick|tired)\.)|(I like eating at (?P<rest2>McDonald's|Burger King|Wendy's)\.)"
这样做的好处是你可以捕捉到新的餐厅名称、感觉等。缺点是依赖标点符号/语法。示例:第一个模式无法识别嵌入了
的餐厅名称

3) 做你可能已经在做的事情。自然语言分析比正则表达式本身所能做的要复杂得多


4) 如果不仅仅是关于一些固定的模式,而是关于分析帖子的含义,而不考虑具体的措辞,那么你应该像其他海报所建议的那样使用NLTK。

看看。NLTK中有什么特别的东西需要寻找吗?我现在就去看一看,但不知道你有没有关于起点的建议。谢谢NLTK是自然语言工具包。如果您使用它来解析语言而不是搜索特定的字符序列,那么您正在搜索的模式可能会更加健壮。顺便说一句,您的代码示例不是有效的Python。您想要什么输出格式?如果我有一个大约20000个[餐厅]的列表,让我们说相同数量的[感觉]条目?它的工作限制与我上面提到的相同,但它非常浪费,效率也不是很高。也许您想澄清您的问题中的实际问题/情况?