Выход из Скобки [в СОДЕРЖАНИИ () пункт?

Я заменил цикл for на ColumnDataSource и multiline, что позволяет легко добавлять hovertool. Мне также пришлось добавить несколько CustomJS, потому что вызов @ x / @ y из многострочного показывает все значения x / y. CustomJS гарантирует, что он показывает только правильную позицию x / y.

import pandas as pd
from bokeh.plotting import figure, show, reset_output, output_notebook
from bokeh.models import ColumnDataSource
from bokeh.palettes import Category10
from bokeh.models import HoverTool, ColumnDataSource
from bokeh.models.glyphs import MultiLine
import itertools
from bokeh.models import Legend
from bokeh.models.tools import CustomJSHover

url = 'https://www.bp.com/content/dam/bp/business-sites/en/global/corporate/xlsx/energy-economics/statistical-review/bp-stats-review-2018-all-data.xlsx'
df = pd.read_excel(url, sheet_name = 'Gas Consumption - Bcf', skiprows = 2, skipfooter = 15)
df = df.dropna(how='all').transpose()
df = df.rename(columns=df.iloc[0]).drop(df.index[0])
df = df.reset_index()
df.rename(columns = {'index': 'Year'}, inplace=True)
df = df.drop(df.index[[53, 54, 55]])

top_ten = df.tail(1).T.reset_index().iloc[1:,:]
top_ten.columns = ['country', 'value']
top_ten = top_ten[~top_ten.country.str.contains("Total")]
top_ten = top_ten.sort_values(by = 'value', ascending= False)
top_ten_list = top_ten['country'].tolist()[:10]
top_ten = df[top_ten_list]

y = [df[country].tolist() for country in top_ten.columns.tolist()]
x, xLst = [], df['Year'].tolist()
for i in range(10):
    x.append(xLst)

x_custom = CustomJSHover(code="""
    return '' + special_vars.data_x
""")

y_custom = CustomJSHover(code="""
    return '' + special_vars.data_y
""")

data = {'x': x, 'y': y, 'color': Category10[10], 'name': top_ten_list}

source = ColumnDataSource(data)

output_notebook()

q = figure(plot_width=700, plot_height=500)

q.multi_line(xs='x', ys='y', line_color='color', legend='name', line_width = 3, source=source)
q.add_tools(HoverTool(
    tooltips=[
    ('Year', '@x{custom}'),
    ('Value', '@y{custom}'),
    ('Country', '@name')],
    formatters=dict(x=x_custom, y=y_custom)
))

q.legend.location = "top_left"
q.xaxis.axis_label = "Date"
q.yaxis.axis_label = "billion cubic feet per day"
q.legend.click_policy="hide"
show(q)
10
задан ConcernedOfTunbridgeWells 8 December 2008 в 16:35
поделиться

2 ответа

Вы не должны выходить [поскольку это не имеет никакого особого значения в Полнотекстовом поиске. Если действительно необходимо искать точное совпадение, хотя, можно использовать "" метки.

Далее, можно использовать несколько "" в одинарных кавычках:

CONTAINS('"word1" or "word2" or "word3"')

Это также работает:

CONTAINS('"word1" and "word2" and "word3"')

Что-либо вставило двойные кавычки, рассматривается как точный текст. Таким образом, если я должен был сделать поиск поля Description Производства. Таблица ProductDescription в AdventureWorks, я мог использовать

CONTAINS('shifting and "on or off-road"') 

и это нашло бы соответствия для слова, смещающегося, который также имел фразу "на или для бездорожья".

Единственный специальный символ является ~, он может использоваться вместо команды NEAR.

CONTAINS('shifting ~ smooth')

совпадает с

CONTAINS('shifting NEAR smooth')

и найдет соответствия, где смещение слов и гладкий друг около друга.

8
ответ дан 4 December 2019 в 01:32
поделиться

Не в духе полнотекстового индексирования, по-видимому.

слово

Строка символов без пробелов или пунктуации.

фраза

Одно или несколько слов с пробелами между каждым словом.

И

Пунктуация проигнорирована. Поэтому СОДЕРЖИТ (тестирование, "компьютерный отказ") соответствует строке значению, "Где мой компьютер? Отказ найти его был бы дорогим".

Я не уверен, каковы Ваши опции.

Очевидно, LIKE хорошо работает:

SELECT *
FROM dbo.stackoverflow_319730
WHERE txtcol LIKE 'arg[ [ ]0]'

Но

SELECT *
FROM dbo.stackoverflow_319730
WHERE CONTAINS(txtcol, '"arg[0]"')

Даже соответствует столбцу 'arg[1]' в нем, например:

CREATE TABLE [dbo].[stackoverflow_319730](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [txtcol] [text] NOT NULL,
 CONSTRAINT [PK_stackoverflow_319730] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

INSERT INTO [dbo].[stackoverflow_319730] (txtcol) VALUES ('arg[0]')
INSERT INTO [dbo].[stackoverflow_319730] (txtcol) VALUES ('arg[1]')
INSERT INTO [dbo].[stackoverflow_319730] (txtcol) VALUES ('some other text')
INSERT INTO [dbo].[stackoverflow_319730] (txtcol) VALUES ('arg[0], arg[1]')

EXEC sp_fulltext_catalog   'FTCatalog','create'
EXEC sp_fulltext_table     'stackoverflow_319730', 'create', 'FTCatalog', 'pk_stackoverflow_319730' 
EXEC sp_fulltext_column    'stackoverflow_319730', 'txtcol', 'add' 
EXEC sp_fulltext_table     'stackoverflow_319730','activate' 
EXEC sp_fulltext_catalog   'FTCatalog', 'start_full' 

SELECT *
FROM dbo.stackoverflow_319730
WHERE txtcol LIKE 'arg[ [ ]0]'

SELECT *
FROM dbo.stackoverflow_319730
WHERE CONTAINS(txtcol, '"arg[0]"')

С результатами, которые намекают на проблему с пунктуацией:

id          txtcol
----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1           arg[0]

(1 row(s) affected)

id          txtcol
----------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1           arg[0]
2           arg[1]
4           arg[0], arg[1]
Informational: The full-text search condition contained noise word(s).
2
ответ дан 4 December 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: