正则表达式 SpaCy
Posted
技术标签:
【中文标题】正则表达式 SpaCy【英文标题】:Regular expression SpaCy 【发布时间】:2018-06-21 16:22:54 【问题描述】:我正在为匹配数字创建一个 spaCy 正则表达式匹配项并将其提取为 pandas 数据框。
问题:Panda 从数字中提取但覆盖值而不是附加。如何解决?
(原代码来源:yarongon)
from __future__ import unicode_literals
import spacy
import re
import pandas as pd
from datetime import date
nlp = spacy.load('en_core_web_sm', disable=['parser', 'tagger', 'ner'])
doc = nlp("This is a sample number: 11. This is second sample number: 1145.")
NUM_PATTERN = re.compile(r"\d+")
for match in re.finditer(NUM_PATTERN, doc.text):
start, end = match.span()
Number = doc.char_span(start, end)
print Number
pandas_attributes = [Number,]
df = pd.DataFrame(pandas_attributes,
columns=['Number'])
print df
输出:
11
1145
Number
0 1145
Expected output:
Number
o 11
1 1145
编辑 1: 我正在尝试对单个文本进行多个模式匹配。
from __future__ import unicode_literals
import spacy
import re
import pandas as pd
from datetime import date
nlp = spacy.load('en_core_web_sm', disable=['parser', 'tagger', 'ner'])
doc = nlp("This is a sample-number: 11. This is second sample number: 1145.")
NUM_PATTERN = re.compile(r"\d+")
HYPH_PATTERN = re.compile('\w+(?:-)\w+')
for match in re.finditer(NUM_PATTERN, doc.text):
start, end = match.span()
Number = doc.char_span(start, end)
print Number
for match in re.finditer(HYPH_PATTERN, doc.text):
start, end = match.span()
Hyph_word = doc.char_span(start, end)
print Hyph_word
pandas_attributes = [Number,Hyph_word]
df = pd.DataFrame(pandas_attributes,
columns=['Number','Hyphenword'])
print df
电流输出。
Output:
11
1145
sample-number
AssertionError: 2 columns passed, passed data had 3 columns
Expected output:
Number Hyphen_word
11 sample-number
1145
编辑2:输出
Number Hyphenword
0 (11) (1145)
1 (sample, -, number) Non
Expected output:
Number Hyphenword
0 11 sample-word
1 1145 Non
【问题讨论】:
【参考方案1】:您需要附加值以在循环中列出:
L = []
for match in re.finditer(NUM_PATTERN, doc.text):
start, end = match.span()
L.append(doc.char_span(start, end))
然后使用DataFrame
构造函数:
df = pd.DataFrame(L,columns=['Number'])
您还可以附加具有多个值的元组:
示例:
L = []
for x in range(3):
Number = x + 1
Val = x + 4
L.append((Number, Val))
print (L)
[(1, 4), (2, 5), (3, 6)]
df = pd.DataFrame(L,columns=['Number', 'Val'])
print (df)
Number Val
0 1 4
1 2 5
2 3 6
我相信你可以使用双append
:
PATTERNS = [NUM_PATTERN, HYPH_PATTERN]
pandas_attributes = []
for pat in PATTERNS:
L = []
for match in re.finditer(pat, doc.text):
start, end = match.span()
L.append(doc.char_span(start, end))
pandas_attributes.append(L)
df = pd.DataFrame(pandas_attributes,
index=['Number','Hyphenword']).T
【讨论】:
你会回答多个模式匹配的工作吗?如何进行编辑 1? 代码正在运行,但是插入了列和行。见编辑 2 我更正了,需要pd.DataFrame(pandas_attributes, index=['Number','Hyphenword']).T
太棒了。作品你可以对这个逗号和括号做些什么来删除它吗?
那么在我把它写到excel之前,有什么办法可以去掉输出中的逗号和括号呢?以上是关于正则表达式 SpaCy的主要内容,如果未能解决你的问题,请参考以下文章