({{, (RefLink[TextPosition, paclet:ref/TextPosition])[text,form]
gives a list of the starting and ending positions at which instances of form occur in text.}, {, (RefLink[TextPosition, paclet:ref/TextPosition])[text,{(Subscript[form, 1]),(Subscript[form, 2]),…}]
gives an association of results for all the types (Subscript[form, i]).}, {, (RefLink[TextPosition, paclet:ref/TextPosition])[text,formspec,n]
gives the positions of the first n cases found.}})

OpenersNotesSection(Spacer1)Details and Options

In (RefLink[TextPosition, paclet:ref/TextPosition])[text,form], text can be a string, a file with plain text, a (RefLink[ContentObject, paclet:ref/ContentObject]) expression or a list of these text objects.

(RefLink[TextPosition, paclet:ref/TextPosition])[{(Subscript[text, 1]),(Subscript[text, 2]),…},…] gives cases for each (Subscript[text, i]).

Identification type form can be:

Possible choices for the property prop are:

The following options can be given:

OpenersPrimaryExamplesSection(Spacer1)Examples  (20)

OpenersExampleSection0(Spacer1)Basic Examples  (6)

TextPosition["NYC, Los Angeles, and Chicago are the largest cities in the United States of America in 2018.","City"]

Find the nouns in a sentence:

TextPosition["The quick brown fox jumps over the lazy dog.","Noun"]

Find currency amounts:

TextPosition["The shirt cost $50 in America, but only 5€ in Italy.", "CurrencyAmount"]

Find positions of cities, countries and dates in text:

TextPosition["NYC, Los Angeles, and Chicago are the largest cities in the United States of America in 2018.",{"City","Country","Date"}]

Function[text,Map[StringTake[text,#]&,TextPosition[text,{"City","Country","Date"}]]]["NYC, Los Angeles, and Chicago are the largest cities in the United States of America in 2018."]

Find all the locations and get their positions:

TextPosition["NYC, Los Angeles, and Chicago are the largest cities in the USA in 2018.","Location"]

Function[text,StringTake[text,TextPosition[text,"Location"]]]["NYC, Los Angeles, and Chicago are the largest cities in the USA in 2018."]

Find all references to New York City in a text:

TextPosition["I love New York - I ❤ NYC",(Entity["New York City", Entity["City",{"NewYork","NewYork","UnitedStates"}], "Entity[\"City\", {\"NewYork\", \"NewYork\", \"UnitedStates\"}]", "city"])]

OpenersExampleSection1(Spacer1)Scope  (4)

OpenersExampleSubsection0(Spacer1)ContextObject and Files  (2)

Find instances of colors in a (RefLink[ContentObject, paclet:ref/ContentObject]):

doc=TextSearch["ExampleData/Text", "dog"][1]

TextPosition[doc,"Color"]

StringTake[doc["Plaintext"],TextPosition[doc,"Color"]]

Find quantities in a (RefLink[File, paclet:ref/File]):

file=TextSearch["ExampleData/Text", "dog"][1,"Location"]

TextPosition[file,"Color"]

StringTake[Import[file,"Plaintext"],TextPosition[file,"Color"]]

OpenersExampleSubsection1(Spacer1)Alternatives and Containing  (2)

Use (RefLink[Alternatives, paclet:ref/Alternatives]) to match multiple types:

TextPosition["John and Mary went to the store.", "Noun" | "Verb"]

TextPosition["John and Mary went to the store.", "Noun" |"ProperNoun"| "Verb"]

Find all sentences in a string that contain currency amounts:

TextPosition["I have a fairly clear idea of what I will buy at the store.  I want shoes, a computer, and a jacket.  The computer will be the most expensive, and will cost over $1000.", Containing["Sentence", "CurrencyAmount"]]

Find all sentences in a string that contain countries:

TextPosition["On vacation, I first went to France, then I went to Belgium.  The food was amazing in both countries.", Containing["Sentence", "Country"]]

Combine (RefLink[Alternatives, paclet:ref/Alternatives]) and (RefLink[Containing, paclet:ref/Containing]) to form highly structured queries:

TextPosition["I have a fairly clear idea of what I will buy at the store.  I want shoes, a computer, and a jacket.  The computer will be the most expensive, and will cost over $1000.  John will like my computer.", Containing["Sentence", "CurrencyAmount" | "ProperNoun"]]

OpenersExampleSection2(Spacer1)Options  (3)

OpenersExampleSubsection2(Spacer1)AcceptanceThreshold  (1)

By default, all the detected entities have an estimated probability higher than 0.5:

TextPosition[ExampleData[{"Text","JFKInaugural"}],{"Country","Date","Person"}]

Map[StringTake[ExampleData[{"Text","JFKInaugural"}],#]&,TextPosition[ExampleData[{"Text","JFKInaugural"}],{"Country","Date","Person"}]]

Get only the entities that are highly probable to be correct by setting a high (RefLink[AcceptanceThreshold, paclet:ref/AcceptanceThreshold]):

TextPosition[ExampleData[{"Text","JFKInaugural"}],{"Country","Date","Person"},"AcceptanceThreshold"->0.9]

Map[StringTake[ExampleData[{"Text","JFKInaugural"}],#]&,TextPosition[ExampleData[{"Text","JFKInaugural"}],{"Country","Date","Person"},"AcceptanceThreshold"->0.9]]

OpenersExampleSubsection3(Spacer1)PerformanceGoal  (1)

Using (RefLink[PerformanceGoal, paclet:ref/PerformanceGoal])->"Speed" can help to have faster detection, at the cost of lower accuracy:

AbsoluteTiming@TextPosition["My favourite cities are New York and Foix","City"]

AbsoluteTiming@TextPosition["My favourite cities are New York and Foix","City",PerformanceGoal->"Speed"]

OpenersExampleSubsection4(Spacer1)VerifyInterpretation  (1)

By default, some entities cannot be interpreted, either because they are not correct or because they are not yet in the knowledgebase. In these cases, a string is returned instead of an interpretation:

TextPosition["We visited Toulouse and Foix in France.","City"]

AssociationMap[Interpreter["City"],StringTake["We visited Toulouse and Foix in France.",{{12,19},{25,28}}]]

Use (RefLink[VerifyInterpretation, paclet:ref/VerifyInterpretation]) to filter out the entities that cannot be interpreted:

TextPosition["We visited Toulouse and Foix in Midi-Pyrénées in France.","City",VerifyInterpretation->True]

OpenersExampleSection3(Spacer1)Applications  (6)

OpenersExampleSubsection5(Spacer1)Word and Sentence Segmentation  (2)

Word segmentation preserves syntactic elements such as email addresses, URLs, and Twitter handles:

wordPositions=TextPosition["His email address is user@domain.com and Twitter handle is @username. http://www.wolfram.com is a useful resource for Wolfram Language programmers.","Word"]

TextElement@StringTake["His email address is user@domain.com and Twitter handle is @username. http://www.wolfram.com is a useful resource for Wolfram Language programmers.",wordPositions]

All the non-whitespace characters are grabbed with forms (StringTypeLink["Word", paclet:ref/interpreter/Word]) and "Punctuation":

tokenPositions=TextPosition["Washington D.C. is the capital of the United States.  Mr. Anthony A. Williams was the mayor.","Word"|"Punctuation"]

TextElement@StringTake["Washington D.C. is the capital of the United States.  Mr. Anthony A. Williams was the mayor.",tokenPositions]

Sentence segmentation intelligently ignores acronyms and other misleading boundaries:

text="Washington D.C. is the capital of the United States.  Mr. Fox is the CEO of the company.  She co-founded the company with Mrs. Smith.";
sentencePositions=TextPosition[text, "Sentence"]

TextElement@StringTake[text,sentencePositions]

OpenersExampleSubsection6(Spacer1)Parts of Speech  (2)

Return all words of a given part of speech:

TextPosition["John and Mary went to the new store.", "Noun"]

TextPosition["John and Mary went to the new store.", "Verb"]

TextPosition["John and Mary went to the new store.", "Preposition"]

Make a table of word clouds from parts of speech:

alice = ExampleData[{"Text", "AliceInWonderland"}];

partsOfSpeech = TextPosition[alice, {"Noun", "Verb", "Adjective", "Adverb"}]

Grid @Partition[KeyValueMap[Labeled[WordCloud[#2, ImageSize -> 200],#1]&, Map[StringTake[alice,#]&,partsOfSpeech]],2]

OpenersExampleSubsection7(Spacer1)Entities and Interpretable Objects  (2)

Find countries:

text="On vacation, I first went to France, then I went to Belgium.";
TextPosition[text, "Country"]

StringTake[text,TextPosition[text, "Country"]]

Return interpreted strings as (RefLink[Entity, paclet:ref/Entity]) objects:

AssociationMap[Interpreter["Country"],{"France","Belgium"}]

Find currency amounts in a Wikipedia article:

dollarstore = WikipediaData@First@WikipediaSearch["Variety Store"];

currencies=TextPosition[dollarstore, "CurrencyAmount"]

Get currency amounts:

Interpreter["CurrencyAmount"][StringTake[dollarstore,currencies]]

OpenersExampleSection4(Spacer1)Properties & Relations  (1)

(RefLink[TextPosition, paclet:ref/TextPosition]) handles the same types as (RefLink[TextCases, paclet:ref/TextCases]) and (RefLink[TextContents, paclet:ref/TextContents]), and always identify the same substrings as these functions for a given type:

TextContents["Boston, Worcester, and Springfield are the largest cities in Massachusetts.","City"]

TextCases["Boston, Worcester, and Springfield are the largest cities in Massachusetts.","City"]

TextPosition["Boston, Worcester, and Springfield are the largest cities in Massachusetts.","City"]

(RefLink[TextCases, paclet:ref/TextCases]) is a generalization of (RefLink[TextPosition, paclet:ref/TextPosition]):

TextCases["Boston, Worcester, and Springfield are the largest cities in Massachusetts.","City"->"Position"]

TextPosition["Boston, Worcester, and Springfield are the largest cities in Massachusetts.",{"City","AdministrativeDivision"}]

TextCases["Boston, Worcester, and Springfield are the largest cities in Massachusetts.",{"City","AdministrativeDivision"}->"Position"]

({{DocumentationFooterIconsRelatedFunction.png, ({{See Also}, {(RefLink[TextCases, paclet:ref/TextCases])  ▪  (RefLink[TextContents, paclet:ref/TextContents])  ▪  (RefLink[StringPosition, paclet:ref/StringPosition])  ▪  (RefLink[Containing, paclet:ref/Containing])}})}})

({{DocumentationFooterIconsRelatedGuide.png, ({{Related Guides}, {▪(RefLinkPlain[Text Content Types, paclet:guide/TextContentTypes])}, {▪(RefLinkPlain[Text Analysis, paclet:guide/TextAnalysis])}})}})