Вот вариант, использующий recode_factor
df %>%
mutate_at(
vars(starts_with("s")),
~recode_factor(.x, `-2` = "SLOW", `-1` = "LOW", `0` = "NO", `1` = "HIGH", `2` = "SHIGH"))
# name s1 s2 s3
#1 A NO HIGH SHIGH
#2 B SLOW LOW NO
#3 C NO NO NO
#4 D LOW NO HIGH
или альтернативно
library(tidyverse)
df %>%
gather(k, v, -name) %>%
mutate(v = recode_factor(v, `-2` = "SLOW", `-1` = "LOW", `0` = "NO", `1` = "HIGH", `2` = "SHIGH")) %>%
spread(k, v)
# name s1 s2 s3
#1 A NO HIGH SHIGH
#2 B SLOW LOW NO
#3 C NO NO NO
#4 D LOW NO HIGH
<час> df <- read.table(text =
"name s1 s2 s3
A 0 1 2
B -2 -1 0
C 0 0 0
D -1 0 1
", header = T)
XHTML легок, используйте lxml.
from lxml import etree
from StringIO import StringIO
etree.parse(StringIO(html), etree.HTMLParser(recover=False))
HTML более тверд, так как традиционно не было такого же интереса к проверке среди толпы HTML (выполните сам StackOverflow через блок проверки допустимости, yikes). Самое легкое решение состояло бы в том, чтобы выполнить внешние приложения такой как nsgmls или OpenJade и затем проанализировать их вывод.
Можно решить установить блок проверки допустимости HTML локально и создать клиент для запроса проверки.
Здесь я сделал программу для проверки списка URL в txt файле. Я просто проверял ГОЛОВУ для получения состояния проверки, но если бы Вы делаете ПОЛУЧЕНИЕ, Вы получили бы полные результаты. Посмотрите на API блока проверки допустимости, существует много опций для него.
import httplib2
import time
h = httplib2.Http(".cache")
f = open("urllistfile.txt", "r")
urllist = f.readlines()
f.close()
for url in urllist:
# wait 10 seconds before the next request - be nice with the validator
time.sleep(10)
resp= {}
url = url.strip()
urlrequest = "http://qa-dev.w3.org/wmvs/HEAD/check?doctype=HTML5&uri="+url
try:
resp, content = h.request(urlrequest, "HEAD")
if resp['x-w3c-validator-status'] == "Abort":
print url, "FAIL"
else:
print url, resp['x-w3c-validator-status'], resp['x-w3c-validator-errors'], resp['x-w3c-validator-warnings']
except:
pass
Попробуйте tidylib. Можно добраться, некоторая действительно основная привязка как часть elementtidy модуля (создает elementtrees из документов HTML). http://effbot.org/downloads/#elementtidy
>>> import _elementtidy
>>> xhtml, log = _elementtidy.fixup("<html></html>")
>>> print log
line 1 column 1 - Warning: missing <!DOCTYPE> declaration
line 1 column 7 - Warning: discarding unexpected </html>
line 1 column 14 - Warning: inserting missing 'title' element
Парсинг журнала должен дать Вам в значительной степени все, в чем Вы нуждаетесь.
Я думаю, что HTML, опрятный , сделает то, что Вы хотите. Существует привязка Python для него.
PyTidyLib - это хорошая привязка Python для HTML Tidy. Их пример:
from tidylib import tidy_document
document, errors = tidy_document('''<p>fõo <img src="bar.jpg">''',
options={'numeric-entities':1})
print document
print errors
Более того, он совместим как с устаревшим HTML Tidy , так и с новым tidy-html5 .