semantic_hacker 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +4 -0
- data/README.txt +49 -0
- data/Rakefile +18 -0
- data/bin/semantic_hacker +7 -0
- data/data/categories.yaml +2048 -0
- data/data/labels.yaml +1762 -0
- data/lib/semantic_hacker/api.rb +29 -0
- data/lib/semantic_hacker/category.rb +19 -0
- data/lib/semantic_hacker/concept.rb +14 -0
- data/lib/semantic_hacker/setup.rb +32 -0
- data/lib/semantic_hacker/signature.rb +19 -0
- data/lib/semantic_hacker.rb +99 -0
- data/semantic_hacker.gemspec +36 -0
- data/spec/semantic_hacker_spec.rb +6 -0
- data/spec/spec_helper.rb +15 -0
- data/test/fixtures/1760484413.html +339 -0
- data/test/fixtures/category.json +17 -0
- data/test/fixtures/concept.json +27 -0
- data/test/fixtures/signature.json +135 -0
- data/test/semantic_hacker_test.rb +32 -0
- data/test/test_helper.rb +38 -0
- data/version.txt +1 -0
- metadata +100 -0
@@ -0,0 +1,29 @@
|
|
1
|
+
module SemanticHacker
|
2
|
+
class Api
|
3
|
+
include HTTParty
|
4
|
+
format :json
|
5
|
+
base_uri "http://api.semantichacker.com/#{APIKEY}"
|
6
|
+
default_params :format => "json"
|
7
|
+
|
8
|
+
def self.about
|
9
|
+
OpenStruct.new(@data["about"].map { |x| [ x[0].dup.to_underscore, x[1] ] } )
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.generate
|
13
|
+
data = @data.dup
|
14
|
+
content_path.each{|x| data = data[x]}
|
15
|
+
|
16
|
+
result = Hash[data.map do |l|
|
17
|
+
if l.has_key?("index")
|
18
|
+
label = SemanticHacker.labels[l["index"]]
|
19
|
+
elsif l.has_key?("id")
|
20
|
+
label = SemanticHacker.categories[l["id"]]
|
21
|
+
else
|
22
|
+
label = l["label"]
|
23
|
+
end
|
24
|
+
[ label, l["weight"]]
|
25
|
+
end.collect]
|
26
|
+
return {:about => about, content_path.last.to_sym => result}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module SemanticHacker
|
2
|
+
class Category < Api
|
3
|
+
def self.content_path
|
4
|
+
%w(categorizer categorizerResponse categories)
|
5
|
+
end
|
6
|
+
def self.uri data
|
7
|
+
options = {:query => { :uri => data }}
|
8
|
+
@data = get('/category', options)
|
9
|
+
return generate
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.content data
|
13
|
+
options = {:query => { :content => data }}
|
14
|
+
@data = get('/category', options)
|
15
|
+
return generate
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
#a = SemanticHacker::Category.uri("http://washingtondc.craigslist.org/nva/apa/1760484413.html")
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module SemanticHacker
|
2
|
+
class Concept < Api
|
3
|
+
def self.content_path
|
4
|
+
%w(conceptExtractor conceptExtractorResponse concepts)
|
5
|
+
end
|
6
|
+
def self.uri data
|
7
|
+
options = {:query => { :uri => data }}
|
8
|
+
@data = get('/concept', options)
|
9
|
+
return generate
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
#a = SemanticHacker::Concept.uri("http://washingtondc.craigslist.org/nva/apa/1760484413.html")
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module SemanticHacker
|
2
|
+
module Setup
|
3
|
+
include HTTParty
|
4
|
+
format :plain
|
5
|
+
|
6
|
+
@convert = proc {|data| Hash[data.split("\n").map{|label| label.split("\t")}.collect]}
|
7
|
+
|
8
|
+
def self.labels
|
9
|
+
if File.exist?(file = File.join(DATA, "labels.yaml"))
|
10
|
+
labels = YAML.load(File.read(file))
|
11
|
+
else
|
12
|
+
raw = get('http://textwise.com/api_docs/labels/odp_2009_l1_1.6k.txt')
|
13
|
+
File.open(file, "W") do |f|
|
14
|
+
f.puts YAML.dump(labels = @convert.call(raw))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
return labels
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.categories
|
21
|
+
if File.exist?(file = File.join(DATA, "categories.yaml"))
|
22
|
+
categories = YAML.load(File.read(file))
|
23
|
+
else
|
24
|
+
raw = get('http://textwise.com/api_docs/labels/odp_2009_l1_1.6k_categories.txt')
|
25
|
+
File.open(file, "W") do |f|
|
26
|
+
f.puts YAML.dump(categories = @convert.call(raw))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
return categories
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module SemanticHacker
|
2
|
+
class Signature < Api
|
3
|
+
def self.content_path
|
4
|
+
%w(siggen siggenResponse signature)
|
5
|
+
end
|
6
|
+
def self.uri data
|
7
|
+
options = {:query => { :uri => data }}
|
8
|
+
@data = get('/signature', options)
|
9
|
+
return generate
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.content data
|
13
|
+
options = {:query => { :content => data }}
|
14
|
+
@data = get('/signature', options)
|
15
|
+
return generate
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
#a = SemanticHacker::Signature.uri("http://washingtondc.craigslist.org/nva/apa/1760484413.html")
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
require 'httparty'
|
3
|
+
|
4
|
+
class String
|
5
|
+
def to_underscore!
|
6
|
+
self.gsub!(/(.)([A-Z])/,'\1_\2').downcase!
|
7
|
+
end
|
8
|
+
def to_underscore
|
9
|
+
self.clone.to_underscore!
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
|
14
|
+
module SemanticHacker
|
15
|
+
|
16
|
+
unless File.exist?(api_file = File.join(ENV["HOME"], ".semantic_hacker"))
|
17
|
+
puts "Please put the api key into `/.semantic_hacker"
|
18
|
+
exit
|
19
|
+
end
|
20
|
+
|
21
|
+
# :stopdoc:
|
22
|
+
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
|
23
|
+
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
|
24
|
+
DATA = File.join(PATH, "data")
|
25
|
+
APIKEY = File.read(api_file).rstrip.lstrip
|
26
|
+
|
27
|
+
# :startdoc:
|
28
|
+
|
29
|
+
# Returns the version string for the library.
|
30
|
+
#
|
31
|
+
def self.version
|
32
|
+
@version ||= File.read(path('version.txt')).strip
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.check
|
36
|
+
@categories = Setup.categories
|
37
|
+
@labels = Setup.labels
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.labels
|
41
|
+
@labels
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.categories
|
45
|
+
@categories
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns the library path for the module. If any arguments are given,
|
49
|
+
# they will be joined to the end of the libray path using
|
50
|
+
# <tt>File.join</tt>.
|
51
|
+
#
|
52
|
+
def self.libpath( *args, &block )
|
53
|
+
rv = args.empty? ? LIBPATH : ::File.join(LIBPATH, args.flatten)
|
54
|
+
if block
|
55
|
+
begin
|
56
|
+
$LOAD_PATH.unshift LIBPATH
|
57
|
+
rv = block.call
|
58
|
+
ensure
|
59
|
+
$LOAD_PATH.shift
|
60
|
+
end
|
61
|
+
end
|
62
|
+
return rv
|
63
|
+
end
|
64
|
+
|
65
|
+
# Returns the lpath for the module. If any arguments are given,
|
66
|
+
# they will be joined to the end of the path using
|
67
|
+
# <tt>File.join</tt>.
|
68
|
+
#
|
69
|
+
def self.path( *args, &block )
|
70
|
+
rv = args.empty? ? PATH : ::File.join(PATH, args.flatten)
|
71
|
+
if block
|
72
|
+
begin
|
73
|
+
$LOAD_PATH.unshift PATH
|
74
|
+
rv = block.call
|
75
|
+
ensure
|
76
|
+
$LOAD_PATH.shift
|
77
|
+
end
|
78
|
+
end
|
79
|
+
return rv
|
80
|
+
end
|
81
|
+
|
82
|
+
# Utility method used to require all files ending in .rb that lie in the
|
83
|
+
# directory below this file that has the same name as the filename passed
|
84
|
+
# in. Optionally, a specific _directory_ name can be passed in such that
|
85
|
+
# the _filename_ does not have to be equivalent to the directory.
|
86
|
+
#
|
87
|
+
def self.require_all_libs_relative_to( fname, dir = nil )
|
88
|
+
dir ||= ::File.basename(fname, '.*')
|
89
|
+
search_me = ::File.expand_path(
|
90
|
+
::File.join(::File.dirname(fname), dir, '**', '*.rb'))
|
91
|
+
|
92
|
+
Dir.glob(search_me).sort.each {|rb| require rb}
|
93
|
+
end
|
94
|
+
|
95
|
+
end # module SemanticHacker
|
96
|
+
|
97
|
+
SemanticHacker.require_all_libs_relative_to(__FILE__)
|
98
|
+
SemanticHacker.check()
|
99
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{semantic_hacker}
|
5
|
+
s.version = "0.0.1"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Thomas Gallaway"]
|
9
|
+
s.date = %q{2010-05-27}
|
10
|
+
s.default_executable = %q{semantic_hacker}
|
11
|
+
s.description = %q{Semantic Signatures® are a new way of representing and analyzing semantic information (meaning) in text. Semantic Signatures, produced by TextWise’s Trainable Semantic Vectors (TSV) technology, provide a rich semantic representation of the multiple concepts and topics contained in a body of text. Semantic Signatures can be constructed for a wide range of texts including individual words, phrases, word lists (e.g. metadata), short passages (such as text advertisements or image labels), web pages, or full text documents (e.g. technical articles).}
|
12
|
+
s.email = %q{atomist@atomlab.us}
|
13
|
+
s.executables = ["semantic_hacker"]
|
14
|
+
s.extra_rdoc_files = ["History.txt", "README.txt", "bin/semantic_hacker", "version.txt"]
|
15
|
+
s.files = ["History.txt", "README.txt", "Rakefile", "bin/semantic_hacker", "data/categories.yaml", "data/labels.yaml", "lib/semantic_hacker.rb", "lib/semantic_hacker/api.rb", "lib/semantic_hacker/category.rb", "lib/semantic_hacker/concept.rb", "lib/semantic_hacker/setup.rb", "lib/semantic_hacker/signature.rb", "semantic_hacker.gemspec", "spec/semantic_hacker_spec.rb", "spec/spec_helper.rb", "test/fixtures/1760484413.html", "test/fixtures/category.json", "test/fixtures/concept.json", "test/fixtures/signature.json", "test/semantic_hacker_test.rb", "test/test_helper.rb", "version.txt"]
|
16
|
+
s.homepage = %q{http://www.atomlab.us/semantic_hacker}
|
17
|
+
s.rdoc_options = ["--main", "README.txt"]
|
18
|
+
s.require_paths = ["lib"]
|
19
|
+
s.rubyforge_project = %q{semantic_hacker}
|
20
|
+
s.rubygems_version = %q{1.3.6}
|
21
|
+
s.summary = %q{Semantic Signatures® are a new way of representing and analyzing semantic information (meaning) in text}
|
22
|
+
s.test_files = ["test/test_helper.rb"]
|
23
|
+
|
24
|
+
if s.respond_to? :specification_version then
|
25
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
26
|
+
s.specification_version = 3
|
27
|
+
|
28
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
29
|
+
s.add_development_dependency(%q<bones>, [">= 3.4.1"])
|
30
|
+
else
|
31
|
+
s.add_dependency(%q<bones>, [">= 3.4.1"])
|
32
|
+
end
|
33
|
+
else
|
34
|
+
s.add_dependency(%q<bones>, [">= 3.4.1"])
|
35
|
+
end
|
36
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
|
2
|
+
require File.expand_path(
|
3
|
+
File.join(File.dirname(__FILE__), %w[.. lib semantic_hacker]))
|
4
|
+
|
5
|
+
Spec::Runner.configure do |config|
|
6
|
+
# == Mock Framework
|
7
|
+
#
|
8
|
+
# RSpec uses it's own mocking framework by default. If you prefer to
|
9
|
+
# use mocha, flexmock or RR, uncomment the appropriate line:
|
10
|
+
#
|
11
|
+
# config.mock_with :mocha
|
12
|
+
# config.mock_with :flexmock
|
13
|
+
# config.mock_with :rr
|
14
|
+
end
|
15
|
+
|
@@ -0,0 +1,339 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Charming apartment homes at Camden Fair Lakes</title>
|
5
|
+
<meta name="robots" content="NOARCHIVE,NOFOLLOW">
|
6
|
+
<link type="text/css" rel="stylesheet" media="all" href="http://www.craigslist.org/styles/craigslist.css?v=3">
|
7
|
+
</head>
|
8
|
+
|
9
|
+
<body class="posting">
|
10
|
+
|
11
|
+
|
12
|
+
<div class="bchead">
|
13
|
+
<a id="ef" href="/email.friend?postingID=1760484413">email this posting to a friend</a>
|
14
|
+
<a href="http://washingtondc.craigslist.org/">washington, DC craigslist</a> >
|
15
|
+
<a href="http://washingtondc.craigslist.org/nva/">northern virginia</a> >
|
16
|
+
<a href="http://washingtondc.craigslist.org/nva/hhh/">housing</a> >
|
17
|
+
<a href="http://washingtondc.craigslist.org/nva/apa/">apts/housing for rent</a>
|
18
|
+
</div>
|
19
|
+
|
20
|
+
|
21
|
+
|
22
|
+
<div id="flags">
|
23
|
+
<div id="flagMsg">
|
24
|
+
please <a href="http://www.craigslist.org/about/help/flags_and_community_moderation">flag</a> with care:
|
25
|
+
</div>
|
26
|
+
<div id="flagChooser">
|
27
|
+
<br>
|
28
|
+
<a class="fl" id="flag16" href="/flag/?flagCode=16&postingID=1760484413"
|
29
|
+
title="Wrong category, wrong site, discusses another post, or otherwise misplaced">
|
30
|
+
miscategorized</a>
|
31
|
+
<br>
|
32
|
+
|
33
|
+
<a class="fl" id="flag28" href="/flag/?flagCode=28&postingID=1760484413"
|
34
|
+
title="Violates craigslist Terms Of Use or other posted guidelines">
|
35
|
+
prohibited</a>
|
36
|
+
<br>
|
37
|
+
|
38
|
+
<a class="fl" id="flag15" href="/flag/?flagCode=15&postingID=1760484413"
|
39
|
+
title="Posted too frequently, in multiple cities/categories, or is too commercial">
|
40
|
+
spam/overpost</a>
|
41
|
+
<br>
|
42
|
+
|
43
|
+
<a class="fl" id="flag9" href="/flag/?flagCode=9&postingID=1760484413"
|
44
|
+
title="Should be considered for inclusion in the Best-Of-Craigslist">
|
45
|
+
best of craigslist</a>
|
46
|
+
<br>
|
47
|
+
</div>
|
48
|
+
</div>
|
49
|
+
|
50
|
+
<div id="tsb">
|
51
|
+
<a href="http://www.craigslist.org/about/FHA.html">Stating a discriminatory preference in a housing post is illegal - please flag discriminatory posts as prohibited</a></div> <div id="tsb"> <em>Avoid scams and fraud by dealing locally!</em> Beware any arrangement involving Western Union, Moneygram, wire transfer, or a landlord/owner who is out of the country or cannot meet you in person. <a href="http://www.craigslist.org/about/scams.html">More info</a></div>
|
52
|
+
<h2>$1468 / 2br - Charming apartment homes at Camden Fair Lakes (Fairfax)</h2>
|
53
|
+
<hr>
|
54
|
+
Date: 2010-05-26, 12:00PM EDT<br>
|
55
|
+
Reply to: <a href="mailto:hous-sebhs-1760484413@craigslist.org?subject=%241468%20%2F%202br%20-%20Charming%20apartment%20homes%20at%20Camden%20Fair%20Lakes%20(Fairfax)&body=%0A%0Ahttp%3A%2F%2Fwashingtondc.craigslist.org%2Fnva%2Fapa%2F1760484413.html%0A">hous-sebhs-1760484413@craigslist.org</a> <sup>[<a href="http://www.craigslist.org/about/help/replying_to_posts" target="_blank">Errors when replying to ads?</a>]</sup><br>
|
56
|
+
<hr>
|
57
|
+
<br>
|
58
|
+
<div id="userbody">
|
59
|
+
<img src="http://www.eliterenting.com/files/_images/blank_1x1.php5?z=34869">
|
60
|
+
<table width="800" border="0" cellspacing="0" cellpadding="0">
|
61
|
+
<tr>
|
62
|
+
<td><table width="800" border="0" cellspacing="0" cellpadding="0">
|
63
|
+
<tr>
|
64
|
+
<td><table width="800" border="0" cellpadding="0" cellspacing="0">
|
65
|
+
<tr>
|
66
|
+
<td><table width="800" border="0" cellspacing="0" cellpadding="0">
|
67
|
+
<tr>
|
68
|
+
<td width="300" align="center" valign="bottom"><table width="290" border="0" cellspacing="0" cellpadding="0">
|
69
|
+
<tr>
|
70
|
+
<td><img src="http://images.eliterenting.com/ImageTank/i.php?a=6&id=49418&w=350" style="width:290px;height:166px;display:block;" border="0"></td>
|
71
|
+
</tr>
|
72
|
+
<tr>
|
73
|
+
<td> </td>
|
74
|
+
</tr>
|
75
|
+
</table></td>
|
76
|
+
<td width="500" align="left" valign="top"><img src="http://www.eliterenting.com/files/cl/cammain500.gif" width="500" height="253"></td>
|
77
|
+
</tr>
|
78
|
+
</table></td>
|
79
|
+
</tr>
|
80
|
+
</table></td>
|
81
|
+
</tr>
|
82
|
+
<tr>
|
83
|
+
<td><table width="800" border="0" cellspacing="0" cellpadding="0">
|
84
|
+
<tr>
|
85
|
+
<td width="518" valign="top" background="http://www.eliterenting.com/files/cl/cammainbar.gif"><table width="518" border="0" cellspacing="0" cellpadding="20">
|
86
|
+
<tr>
|
87
|
+
<td><table width="478" border="0" cellspacing="0" cellpadding="3">
|
88
|
+
<tr>
|
89
|
+
<td colspan="4" valign="top"><div align="left"><font size="3"><b>Features</b></font>
|
90
|
+
<hr align="left" size="1" noshade style="border-top: 1px solid #000000;">
|
91
|
+
</div></td>
|
92
|
+
</tr>
|
93
|
+
<tr>
|
94
|
+
<td colspan="2" valign="top"></td>
|
95
|
+
<td colspan="2" valign="top"></td>
|
96
|
+
</tr>
|
97
|
+
<tr>
|
98
|
+
<td width="104" valign="top"><div align="left"><b>Bedrooms:</b></div></td>
|
99
|
+
<td width="125" valign="top"><div align="left">2 bedrooms</div></td>
|
100
|
+
<td width="104" valign="top"><div align="left"><b>Bathrooms:</b></div></td>
|
101
|
+
<td width="130" valign="top"><div align="left">2 bathrooms</div></td>
|
102
|
+
</tr>
|
103
|
+
<tr>
|
104
|
+
<td width="104" valign="top"><div align="left"><b>Sq.Ft.:</b></div></td>
|
105
|
+
<td valign="top"><div align="left">1024 Sq.Ft.</div></td>
|
106
|
+
<td width="104" valign="top"><div align="left"><b>Price:</b></div></td>
|
107
|
+
<td width="130" valign="top"><div align="left">$1468</div></td>
|
108
|
+
</tr>
|
109
|
+
<tr>
|
110
|
+
<td colspan="2" valign="top"></td>
|
111
|
+
<td colspan="2" valign="top"></td>
|
112
|
+
</tr>
|
113
|
+
<tr>
|
114
|
+
<td colspan="2" valign="top"></td>
|
115
|
+
<td colspan="2" valign="top"></td>
|
116
|
+
</tr>
|
117
|
+
<tr>
|
118
|
+
<td colspan="4" valign="top"> </td>
|
119
|
+
</tr>
|
120
|
+
<tr>
|
121
|
+
<td colspan="4" valign="top"><div align="left"><font size="3"><b>Apartment Home Features</b></font>
|
122
|
+
<hr align="left" size="1" noshade style="border-top: 1px solid #000000;">
|
123
|
+
</div></td>
|
124
|
+
</tr>
|
125
|
+
<tr>
|
126
|
+
<td colspan="4" valign="top"><div align="left"><table width="100%"><tr valign="top"><td><ul><li>Pantry</li><li>Vaulted Ceilings</li><li>Microwave</li><li>Patio or Balcony</li><li>Cable or Satellite</li></ul></td><td><ul><li>Oversized Closet(s)
|
127
|
+
</li><li>Air Conditioning</li><li>View</li><li></li></ul></td><td><ul><li>Fireplace</li><li>Washer Dryer In Unit</li><li>Ceiling Fan(s)</li><li>Refrigerator</li></ul></td></tr></table></div></td>
|
128
|
+
</tr>
|
129
|
+
<tr>
|
130
|
+
<td colspan="4" valign="top"><div align="left"><strong><font size="3">Community Amenities</font></strong>
|
131
|
+
<hr align="left" size="1" noshade style="border-top: 1px solid #000000;">
|
132
|
+
</div></td>
|
133
|
+
</tr>
|
134
|
+
<tr>
|
135
|
+
<td colspan="4" valign="top"><div align="left"><table width="100%"><tr valign="top"><td><ul><li>Extra Storage</li><li>Public Transportation</li><li>Covered Parking</li><li>Pool</li><li>Common Area Wi-Fi</li></ul></td><td><ul><li>Short Term Lease</li><li>Playground</li><li>Fitness Center</li><li>Garages</li></ul></td><td><ul><li>Emergency Maintenance</li><li>Freeway Access</li><li>Clubhouse</li><li>Business Center</li></ul></td></tr></table></div></td>
|
136
|
+
</tr>
|
137
|
+
<tr>
|
138
|
+
<td colspan="4" valign="top"><div align="left"><font size="3"><b>Description</b></font>
|
139
|
+
<hr align="left" size="1" noshade style="border-top: 1px solid #000000;">
|
140
|
+
</div></td>
|
141
|
+
</tr>
|
142
|
+
<tr>
|
143
|
+
<td colspan="4" valign="top"> <div align="justify">Welcome to Camden Fair Lakes we're glad you're visiting our community! With well designed one, two, and three bedroom apartment homes, you can make the most of life at Camden Fair Lakes. Our professional management and great amenities such as full size washers and dryers, complete fitness center with flat screen TVs, and Metro shuttle mean you'll live better at Camden Fair Lakes. It all adds up to an incredible living experience. Call us today to schedule your personal tour!</div></td>
|
144
|
+
</tr>
|
145
|
+
<tr>
|
146
|
+
<td colspan="4" valign="top"> </td>
|
147
|
+
</tr>
|
148
|
+
<tr>
|
149
|
+
<td colspan="4" valign="top"><div align="left"><font size="3"><b>Contact Camden Fair Lakes</b></font>
|
150
|
+
<hr align="left" size="1" noshade style="border-top: 1px solid #000000;">
|
151
|
+
</div></td>
|
152
|
+
</tr>
|
153
|
+
<tr>
|
154
|
+
<td colspan="4" valign="top"><div align="left">
|
155
|
+
<table width="472" border="0" cellspacing="0" cellpadding="0">
|
156
|
+
<tr>
|
157
|
+
<td width="268" rowspan="4" valign="top"><table width="272" border="0" cellspacing="0" cellpadding="0">
|
158
|
+
<tr>
|
159
|
+
<td><div align="left"><b>Phone:</b></div></td>
|
160
|
+
<td><div align="left">(866) 932-3843</div></td>
|
161
|
+
</tr>
|
162
|
+
<tr>
|
163
|
+
<td></td>
|
164
|
+
<td></td>
|
165
|
+
</tr>
|
166
|
+
<tr>
|
167
|
+
<td width="100"><div align="left"><b>Address:</b></div></td>
|
168
|
+
<td><div align="left">12565 Summit Manor Dr</div></td>
|
169
|
+
</tr>
|
170
|
+
<tr>
|
171
|
+
<td width="100"></td>
|
172
|
+
<td><div align="left">Fairfax, VA 22033</div></td>
|
173
|
+
</tr>
|
174
|
+
</table></td>
|
175
|
+
<td width="75" valign="top"><div align="left"><b>Email:</b> </div></td>
|
176
|
+
<td width="125" valign="top"><div align="left"><a href="http://www.eliterenting.com/contact_property.php5?z=34869" rel="nofollow">Click Here</a></div></td>
|
177
|
+
</tr>
|
178
|
+
<tr>
|
179
|
+
<td colspan="2" valign="top"></td>
|
180
|
+
</tr>
|
181
|
+
<tr>
|
182
|
+
<td valign="top"><div align="left"><b>Website:</b> </div></td>
|
183
|
+
<td valign="top"><div align="left"><a href="http://apartments.camdenliving.com/camdenfairlakes/AptPropertyDetail.aspx" rel="nofollow">Click Here</a></div></td>
|
184
|
+
</tr>
|
185
|
+
<tr>
|
186
|
+
<td colspan="2" valign="top"><div><a href="https://twitter.com/CamdenFairLakes" target="_blank" rel="nofollow"><img src="http://eliterenting.s3.amazonaws.com/cl/icons/ticon.jpg" style="display:inline;" border="0"></a> <a href="http://www.eliterenting.com/contact_property.php5?z=34869" target="_blank" rel="nofollow"><img src="http://eliterenting.s3.amazonaws.com/cl/icons/eicon.jpg" style="display:inline;" border="0"></a> </div></td>
|
187
|
+
</tr>
|
188
|
+
<tr>
|
189
|
+
<td width="268" valign="top"></td>
|
190
|
+
<td width="200" colspan="2" valign="top"></td>
|
191
|
+
</tr>
|
192
|
+
<tr>
|
193
|
+
<td valign="top"></td>
|
194
|
+
<td colspan="2" valign="top"></td>
|
195
|
+
</tr>
|
196
|
+
<tr>
|
197
|
+
<td colspan="3" valign="top"> </td>
|
198
|
+
</tr>
|
199
|
+
<tr>
|
200
|
+
<td colspan="3" valign="top"><div align="left"><font size="3"><b>Directions</b></font>
|
201
|
+
<hr align="left" size="1" noshade style="border-top: 1px solid #000000;">
|
202
|
+
</div></td>
|
203
|
+
</tr>
|
204
|
+
<tr>
|
205
|
+
<td colspan="3" valign="top"><div align="justify">
|
206
|
+
<p>Take I-66 to exit 55B. Go through first traffic light and make a right onto Monument Dr. Take a left on Fields Brigade. Camden Fair Lakes is on the left.</p>
|
207
|
+
</div></td>
|
208
|
+
</tr>
|
209
|
+
</table>
|
210
|
+
</div></td>
|
211
|
+
</tr>
|
212
|
+
<tr>
|
213
|
+
<td colspan="4" valign="top"> </td>
|
214
|
+
</tr>
|
215
|
+
<tr>
|
216
|
+
<td colspan="4" valign="top"> </td>
|
217
|
+
</tr>
|
218
|
+
<tr>
|
219
|
+
<td colspan="4" valign="top"> </td>
|
220
|
+
</tr>
|
221
|
+
</table></td>
|
222
|
+
</tr>
|
223
|
+
|
224
|
+
</table></td>
|
225
|
+
<td width="282" valign="top"><table width="282" border="0" cellpadding="0" cellspacing="0">
|
226
|
+
<tr>
|
227
|
+
<td align="left"> </td>
|
228
|
+
</tr>
|
229
|
+
<tr>
|
230
|
+
<td align="left"><table width="252" border="0" cellspacing="0" cellpadding="0" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000;">
|
231
|
+
<tr>
|
232
|
+
</tr>
|
233
|
+
</table></td>
|
234
|
+
</tr>
|
235
|
+
<tr>
|
236
|
+
<td> </td>
|
237
|
+
</tr>
|
238
|
+
<tr>
|
239
|
+
<td align="left"><table width="252" border="0" cellspacing="0" cellpadding="0" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000;">
|
240
|
+
<tr>
|
241
|
+
<td><img src="http://images.eliterenting.com/ImageTank/i.php?a=6&id=30124&w=250&h=188" width="250" height="188"></td>
|
242
|
+
</tr>
|
243
|
+
</table></td>
|
244
|
+
</tr>
|
245
|
+
<tr>
|
246
|
+
<td> </td>
|
247
|
+
</tr>
|
248
|
+
<tr>
|
249
|
+
<td align="left"><table width="252" border="0" cellspacing="0" cellpadding="0" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000;">
|
250
|
+
<tr>
|
251
|
+
<td><img src="http://images.eliterenting.com/ImageTank/i.php?a=6&id=30125&w=250&h=188" width="250" height="188"></td>
|
252
|
+
</tr>
|
253
|
+
</table></td>
|
254
|
+
</tr>
|
255
|
+
<tr>
|
256
|
+
<td> </td>
|
257
|
+
</tr>
|
258
|
+
<tr>
|
259
|
+
<td align="left"><table width="252" border="0" cellspacing="0" cellpadding="0" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000;">
|
260
|
+
<tr>
|
261
|
+
<td><img src="http://images.eliterenting.com/ImageTank/i.php?a=6&id=30126&w=250&h=188" width="250" height="188"></td>
|
262
|
+
</tr>
|
263
|
+
</table></td>
|
264
|
+
</tr>
|
265
|
+
<tr>
|
266
|
+
<td align="right"><img src="http://www.eliterenting.com/files/cl/cammainrightbtm.gif" width="282" height="105"></td>
|
267
|
+
</tr>
|
268
|
+
</table></td>
|
269
|
+
</tr>
|
270
|
+
</table></td>
|
271
|
+
</tr>
|
272
|
+
</table></td>
|
273
|
+
</tr>
|
274
|
+
<tr>
|
275
|
+
<td> </td>
|
276
|
+
</tr>
|
277
|
+
<tr>
|
278
|
+
<td> </td>
|
279
|
+
</tr>
|
280
|
+
<tr>
|
281
|
+
<td><img src="http://eliterenting.s3.amazonaws.com/cl/ER-Footer800.gif"></td>
|
282
|
+
</tr>
|
283
|
+
<tr>
|
284
|
+
<td><font size="1">115959-20100526-395767</font></td>
|
285
|
+
</tr>
|
286
|
+
</table>
|
287
|
+
<!-- START CLTAGS -->
|
288
|
+
|
289
|
+
|
290
|
+
<br><br>
|
291
|
+
<!-- CLTAG xstreet0=12565 Summit Manor Dr -->
|
292
|
+
<!-- CLTAG xstreet1= -->
|
293
|
+
<!-- CLTAG city=Fairfax -->
|
294
|
+
<!-- CLTAG region=VA -->
|
295
|
+
12565 Summit Manor Dr
|
296
|
+
<small>
|
297
|
+
(<a target="_blank" href="http://maps.google.com/?q=loc%3A+%31%32%35%36%35+Summit+Manor+Dr+Fairfax+VA+US">google map</a>)
|
298
|
+
(<a target="_blank" href="http://maps.yahoo.com/maps_result?addr=%31%32%35%36%35+Summit+Manor+Dr&csz=Fairfax+VA&country=US">yahoo map</a>)
|
299
|
+
</small>
|
300
|
+
<ul class="blurbs">
|
301
|
+
<li><!-- CLTAG catsAreOK=on -->cats are OK - purrr
|
302
|
+
<li><!-- CLTAG dogsAreOK=on -->dogs are OK - wooof
|
303
|
+
<li> <!-- CLTAG GeographicArea=Fairfax -->Location: Fairfax
|
304
|
+
<li>it's NOT ok to contact this poster with services or other commercial interests</ul>
|
305
|
+
<!-- END CLTAGS -->
|
306
|
+
<table summary="craigslist hosted images">
|
307
|
+
<tr>
|
308
|
+
<td align="center"></td>
|
309
|
+
<td align="center"></td>
|
310
|
+
</tr>
|
311
|
+
<tr>
|
312
|
+
<td align="center"></td>
|
313
|
+
<td align="center"></td>
|
314
|
+
</tr>
|
315
|
+
</table>
|
316
|
+
|
317
|
+
</div>
|
318
|
+
PostingID: 1760484413<br>
|
319
|
+
|
320
|
+
|
321
|
+
<br>
|
322
|
+
|
323
|
+
<hr>
|
324
|
+
<ul class="clfooter">
|
325
|
+
<li>Copyright © 2010 craigslist, inc.</li>
|
326
|
+
<li><a href="http://www.craigslist.org/about/terms.of.use.html">terms of use</a></li>
|
327
|
+
<li><a href="http://www.craigslist.org/about/privacy_policy">privacy policy</a></li>
|
328
|
+
<li><a href="/forums/?forumID=8">feedback forum</a></li>
|
329
|
+
</ul>
|
330
|
+
|
331
|
+
<script type="text/javascript" src="http://www.craigslist.org/js/jquery-1.4.2.js"></script>
|
332
|
+
<script type="text/javascript" src="http://www.craigslist.org/js/postings.js"></script>
|
333
|
+
<script type="text/javascript"><!--
|
334
|
+
pID = 1760484413;
|
335
|
+
-->
|
336
|
+
</script>
|
337
|
+
</body>
|
338
|
+
</html>
|
339
|
+
|
@@ -0,0 +1,17 @@
|
|
1
|
+
{
|
2
|
+
"about": {
|
3
|
+
"requestId": "65A7E9AEDC63E1CE0406C1B8D1A3E7AB",
|
4
|
+
"docId": "2627917C26F7F284C8364209B0B21354",
|
5
|
+
"systemType": "category",
|
6
|
+
"configId": "odp_2007_l1_1.7k",
|
7
|
+
"contentType": "text/html",
|
8
|
+
"contentDigest": "C7DBE9045BF3F905EA8E7273EC1A4540",
|
9
|
+
"requestDate": "2010-05-27T19:19:04+00:00",
|
10
|
+
"systemVersion": "2.0",
|
11
|
+
"sourceUri": "http://washingtondc.craigslist.org/nva/apa/1760484413.html"
|
12
|
+
},
|
13
|
+
"categorizer": {"categorizerResponse": {"categories": [ {
|
14
|
+
"id": "1242",
|
15
|
+
"weight": "1.011652"
|
16
|
+
}]}}
|
17
|
+
}
|